gpt4 book ai didi

java - 如何像 TreeSet<> 一样在 SortedSet<> 上定义比较器?

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

我想创建一个按词法排序的字符串列表,所以我使用了基本的 SortedSet

1)  Set<String> words = new SortedSet<String>(){}

并意识到 SortedSet 是一个抽象类,我必须在其中实现 comapartor 方法。所以我去谷歌搜索,发现treeSet更好,我可以使用它预定义的比较器方法。

2)  SortedSet<String> words = new TreeSet<String>(){}

当我查看java文档时,我意识到TreeSet扩展了AbstractSet而不是SortedSet。 问题1-任何人都可以解释第二行是如何仍然工作的(就像我没有概括我通常会做的设置,而是我使用两个完全不同的类,没有父子关系)。 问题 2 - 如何定义将作为 TreeSet 工作的 SortedSet 的比较器。这是 TreeSet 的工作代码

SortedSet<String> words = new TreeSet<>();
Scanner scanner1 = new Scanner(System.in);
String s1 = scanner1.nextLine();
int a = scanner1.nextInt();
while(s1.length()>a){
words.add(s1.substring(0,a));
s1 = s1.substring(a);
}
Iterator itr = words.iterator();
while(itr!= null&&itr.hasNext()){
System.out.println(itr.next());
}

正常输入

welcometojava
3

预期输出

com
eto
jav
wel

编辑-1对于问题2的答案,我期待这样的事情

Set<String> words = new SortedSet<String>() {
@Override
public Comparator<? super String> comparator() {
return null;
}
......

我基本上想学习,如何在使用 SortedSet 时在 TreeSet 中“像”创建一个基本的比较器?我明白,如果存在自然排序,我不需要定义新的比较器。

最佳答案

答案 1:

TreeSet<T>实现NavigableSet<T>接口(interface),扩展 SortedSet<T>谁也延伸Set<T> .

接口(interface)本身实际上并不进行排序,而是具体类进行排序。

所以:

Set<String> myStrings = new TreeSet<>();
// Add a bunch of strings
// ...
for (String s : myStrings) {
System.out.println(s);
}

您仍然可以按排序顺序排列它们。

答案 2:

首先,对于已经实现 Comparable<T> 的类,您可以省略 Comparator对于TreeSet ,因为“自然排序”是通过使用 Comparable<T> 来表示的。的compareTo方法。

否则您可以提供 Comparator实例为TreeSet构造函数的第一个参数:

    Set<String> myStrings = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// Define comparing logic here
return o1.compareTo(o2);
}
});

或使用 Java 8 Lambda:

    Set<String> myStrings = new TreeSet<>((o1, o2) -> o1.compareTo(o2));

关于java - 如何像 TreeSet<> 一样在 SortedSet<> 上定义比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38066291/

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