我有一个项目,教授给了我们一些代码。代码中有一行让我困惑:
<script>
// make dropdowns on the right align right, etc, so they don't go off screen
var dropdown_uls = document.querySelectorAll('#nav li ul')
function fix_dropdowns(){
for (var i=0; i< dropdown_uls.length; i++) {
var ul = dropdown_uls[i]
var rect = ul.getBoundingClientRect()
var body = document.body.getBoundingClientRect()
if(rect.right > body.right){
ul.style.left = 'auto'
ul.style.right = 0
}
if(rect.left < body.left){
ul.style.left = 0
ul.style.right = 'auto'
}
}
}
fix_dropdowns()
addEventListener('resize', fix_dropdowns)
</script>
对arrayListName.sort(null);
的调用到底是做什么的?
文档说:&#34;如果指定的比较器为null,则此列表中的所有元素必须实现Comparable接口和元素&#39;应该使用自然排序。此列表必须是可修改的,但无需调整大小。&#34;这个列表的自然顺序是什么意思?我们尝试排序的元素是电话号码。
注意:我读过javadoc并不清楚它是什么意思。英语不是我的第一语言,教授不用英语授课。我试图谷歌这个问题,但我仍然对具体含义感到困惑。
答案 0 :(得分:4)
假设arrayListName
实际上是ArrayList
类型的变量,那么您在这里调用List#sort
方法。来自documentation:
default void sort(Comparator<? super E> c)
根据指定的
Comparator
引发的顺序对此列表进行排序。如果指定的比较器为
null
,则此列表中的所有元素都必须实现Comparable
界面,并且元素'自然排序应为使用
因此,当比较器为null
时,该方法使用元素的自然排序。
这些自然排序由项目实现接口compareTo
(documentation)时的Compareable
方法给出。对于int
,这种情况越来越多。 String
1, 2, 3, 3, 3, 8, 11
"A", "B", "H", "Helicopter", "Hello", "Tree"
根据lexicographical order进行排序。
使用自然排序排序后的示例:
287
许多类已经实现了这个接口。看看documentation。它目前计算@Override
@SuppressWarnings("unchecked")
public void sort(Comparator<? super E> c) {
final int expectedModCount = modCount;
Arrays.sort((E[]) elementData, 0, size, c);
if (modCount != expectedModCount) {
throw new ConcurrentModificationException();
}
modCount++;
}
个类。
让我们将其与实际的implementation进行比较:
c
将比较器Arrays#sort
传递给方法if (c == null) {
sort(a, fromIndex, toIndex);
}
,让我们看一下implementation的摘录:
Arrays#sort
我们将该调用跟随另一个SELECT
REGEXP_SUBSTR (
str,
'(.*?)(~-delim~-|$)',
1,
LEVEL,
NULL,
1
) output
FROM (
SELECT 'Line1~-delim~-Line2' AS str FROM DUAL
)
CONNECT BY LEVEL <= REGEXP_COUNT (str, '~-delim~-') + 1
方法(implementation)。此方法根据自然排序对元素进行排序。所以没有使用比较器。
答案 1 :(得分:1)
我输入了它并没有抛出错误。它实际上正确地排序列表。这是我的代码:
#content ul{
position:fixed;
top:0;
right: 0;
left: 0;
margin-right: auto;
margin-left: auto;
text-align:center;
width:600px;
-webkit-transition: all 2s;
transition: all 2s;
}
#content ul li {
list-style: none;
display: inline;
-webkit-transition: all 2s;
transition: all 2s;
}
输出结果为:
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(2);
nums.add(4);
nums.add(3);
nums.add(1);
System.out.println(nums);
nums.sort(null);
System.out.println(nums);
sort方法接受Comparator对象,如果传递null,则默认为自然排序。