簡體   English   中英

排除一個特定值時list.sort()如何工作?

[英]how list.sort() works when exclude one specific value?

我有一個清單

List<String> names = new ArrayList<String>();
names.add("One");
names.add("Two");
names.add("Three");
names.add("Six");
names.add("Four");
names.add("Five");

我希望該列表能夠排序,使得“ Six”排在第一位,然后應該按字母順序排列。

names.sort((x, y) -> {
            if (x.startsWith("S"))
                return -1;
            if (y.startsWith("S"))
                return 1; 
            return x.compareTo(y);
        });

這很好。 為什么它不能僅在x.startswith("S")條件下工作。 為什么我需要為y.startsWith("S")添加條件

您不知道sort算法將比較String的順序。 它可能會調用compare("Two","Six") ,並且可能會調用compare("Six","Two") 因此,您的Comparator必須支持這兩種情況。

此外,如果不檢查第一個和第二個參數的startsWith("S") ,就違反了Comparator合同,該合同要求sgn(compare(x, y)) == -sgn(compare(y, x))

順便說一句,最好檢查equals("Six")而不是startsWith("S") 否則,如果您的輸入包含“七”,則您的代碼將失敗。

collections.sort使用合並排序,合並排序的思想是通過階段將列表划分為單個元素列表,並在這些階段中按有序順序將它們合並,因此不能保證您的“六個”將是第一個元素或第二個元素在比較中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM