簡體   English   中英

在Java中將比較器傳遞給collections.sort()?

[英]passing comparator to collections.sort() in Java?

我有以下代碼,我有一個Treeset,如果我通過我的比較器,它工作正常。 但是,如果我構造我的Treeset然后調用collections.sort,我會得到編譯錯誤。 我的代碼在這里

import java.util.*;

public class ComparatorExample {
private static class SbufferComparator implements Comparator<StringBuffer> {

        @Override
        public int compare(StringBuffer s1, StringBuffer s2) {
            return s1.toString().compareTo(s2.toString());

        }

}


    public static void main(String[] args) {
            StringBuffer one = new StringBuffer("one");
            StringBuffer  two = new StringBuffer("two");
            StringBuffer three = new StringBuffer("three");
            Set<StringBuffer> sb=new TreeSet<StringBuffer>();
             //The below line works
            //Set<StringBuffer> sb=new TreeSet<StringBuffer>(new SbufferComparator());
            sb.add(one);
            sb.add(two);
            sb.add(three);
            System.out.println("set before change: "+ sb);
            //This does not work
            Collections.sort(sb, new SbufferComparator());
            System.out.println("set After change: "+ sb);
        }
    }

PS。 我知道StringBuffer是一個bad類型,可以作為Set中的元素保留。 但是,我正在測試Java是否允許在Set中保留一個可變對象。 (python不允許將可變對象放在集合或字典中(map))

Collections.sort()只能應用於List ,並且您正在傳遞一個Set因此它失敗(它根本不應該編譯)。

TreeSet是一個有序Set ,因此您應該使用適當的Comparator創建它,並且該集合的內容將始終排序,而無需手動對其進行排序。

Collections.sort需要List而不是Set 試試這個

Set<StringBuffer> sb=new TreeSet<StringBuffer>(new SbufferComparator());

並刪除完全sort的調用

暫無
暫無

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

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