我正在寻找一个没有重复项的可排序的Java类集合,可在初始化后使用Comparator进行多次排序。是否有比编写代码更纯净的解决方案,它可以防止例如某些ArrayList添加已经存在的另一个具有相同值的对象?
编辑1: 我应该添加一些关于排序的解释。我需要使用不同的比较器(实现的多样性)多次对这组值进行排序。
我正在寻找一个没有重复项的可排序的Java类集合,可在初始化后使用Comparator进行多次排序。是否有比编写代码更纯净的解决方案,它可以防止例如某些ArrayList添加已经存在的另一个具有相同值的对象?
编辑1: 我应该添加一些关于排序的解释。我需要使用不同的比较器(实现的多样性)多次对这组值进行排序。
Set Interface---->SortedSet Interface----->TreeSet Class
Set Interface---->HashSet Class
Set Interface---->LinkedHashSet Class
TreeSet
。它会删除重复项。
TreeSet
实现了SortedSet
接口,因此它将对输入的元素进行排序。 SortedSet s=new TreeSet();
s.add(12);
s.add(12);
s.add(1);
s.add(56);
s.add(6);
s.add(47);
s.add(1);
System.out.println(s);
输出
[1, 6, 12, 47, 56]
使用 Set 存储唯一元素。您始终可以使用 Collections.sort() 对使用的任何集合进行排序。
sort(List<T> list, Comparator<? super T> c) sort(List<T> list)
- user1964668最好是扩展标准集合或从头实现一个。例如:
class SetList<E> extends ArrayList<E> {
boolean add(E e) {
if (contains(e)) {
return false;
} else {
super.add(e);
return true;
}
}
void add(int index, E e) { .. }
void addAll(..) {..}
void addAll(..) {..}
}
接下来你可以使用之前提到的Collections.sort
。不过我建议你要仔细检查一切——我可以想象库方法会对SetList做出错误的假设,因为它扩展了ArrayList,这可能导致灾难。首先阅读ArrayList、List和Collection的javadoc,并认真考虑从头开始创建一个。
class Comparator { ... 一些final字段以提供许多外部实现 ... 和一个保留所选项的字段+setter compare() {if (field) {dosmth}}
- user1964668