gpt4 book ai didi

java - 在Java中将比较器传递给collections.sort()?

转载 作者:行者123 更新时间:2023-12-02 08:38:10 25 4
gpt4 key购买 nike

我有以下代码,其中有一个 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 是一种 类型,不能作为 Set 中的元素保留。然而,我正在测试 Java 是否允许在 Set 中保留可变对象。 (python不允许将可变对象放置在集合或字典(map)中)

最佳答案

Collections.sort() 只能应用于 List,并且您正在传递 Set 所以它会失败(它不应该完全编译)。

TreeSet 是一个排序的Set,因此您应该使用适当的Comparator 创建它,并且该集合的内容将始终排序,无需手动排序。

关于java - 在Java中将比较器传递给collections.sort()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18667412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com