使用自定义排序功能实现 Treeset
Implement Treeset with custom sorting functionality
我正在尝试实现具有自定义排序功能的树集。我已经传递了包含排序逻辑的比较器对象。
import java.util.Comparator;
import java.util.TreeSet;
public class MySetWithCompr {
public static void main(String a[]){
TreeSet<String> ts = new TreeSet<String>(new MyComp());
ts.add("Test1");
ts.add("Test2");
ts.add("Test3");
ts.add("Test4");
System.out.println(ts);
}
}
class MyComp implements Comparator<String>{
@Override
public int compare(String str1, String str2) {
return str1.compareTo(str2);
}
}
上面的程序给出了下面的输出
[Test1, Test2, Test3, Test4]
请建议如何实现比较器逻辑以使结果相反
Expected Result : [Test4, Test3, Test2, Test1]
尝试:
class MyComp implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
return str2.compareTo(str1);
}
}
如果您使用的是 Java 8,您可以简单地写:
Set<String> ts = new TreeSet<>(new MyComp().reversed());
在 Java 8 之前有相同的功能(自 Java 5):
Set<String> ts = new TreeSet<String>(Collections.reverseOrder(new MyComp()));
如果你想 desc 排序有两种方法:
第一个:
class MyComp implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
return str2.compareTo(str1);
}
}
第二个:
class MyComp implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
return -1 * str1.compareTo(str2);
}
}
我正在尝试实现具有自定义排序功能的树集。我已经传递了包含排序逻辑的比较器对象。
import java.util.Comparator;
import java.util.TreeSet;
public class MySetWithCompr {
public static void main(String a[]){
TreeSet<String> ts = new TreeSet<String>(new MyComp());
ts.add("Test1");
ts.add("Test2");
ts.add("Test3");
ts.add("Test4");
System.out.println(ts);
}
}
class MyComp implements Comparator<String>{
@Override
public int compare(String str1, String str2) {
return str1.compareTo(str2);
}
}
上面的程序给出了下面的输出
[Test1, Test2, Test3, Test4]
请建议如何实现比较器逻辑以使结果相反
Expected Result : [Test4, Test3, Test2, Test1]
尝试:
class MyComp implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
return str2.compareTo(str1);
}
}
如果您使用的是 Java 8,您可以简单地写:
Set<String> ts = new TreeSet<>(new MyComp().reversed());
在 Java 8 之前有相同的功能(自 Java 5):
Set<String> ts = new TreeSet<String>(Collections.reverseOrder(new MyComp()));
如果你想 desc 排序有两种方法:
第一个:
class MyComp implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
return str2.compareTo(str1);
}
}
第二个:
class MyComp implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
return -1 * str1.compareTo(str2);
}
}