arrayListName.sort(null)做什么?

时间:2018-03-22 18:48:35

标签: java sorting arraylist

我有一个项目,教授给了我们一些代码。代码中有一行让我困惑:

<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并不清楚它是什么意思。英语不是我的第一语言,教授不用英语授课。我试图谷歌这个问题,但我仍然对具体含义感到困惑。

2 个答案:

答案 0 :(得分:4)

说明

假设arrayListName实际上是ArrayList类型的变量,那么您在这里调用List#sort方法。来自documentation

  

default void sort(Comparator<? super E> c)

     

根据指定的Comparator引发的顺序对此列表进行排序。

     

如果指定的比较器null,则此列表中的所有元素都必须实现Comparable界面,并且元素'自然排序应为使用

因此,当比较器为null时,该方法使用元素的自然排序

这些自然排序由项目实现接口compareTodocumentation)时的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,则默认为自然排序。