【发布时间】:2013-01-31 00:44:45
【问题描述】:
我正在搜索可排序的(我的意思是在初始化后进行排序并且多次使用 Comparator 进行排序)Java 类集合,没有重复项。有没有比编写不透明的代码更纯粹的解决方案,例如阻止一些 ArrayList 添加另一个具有相同值的对象?
编辑 1: 我应该添加一些关于排序的解释。我需要使用不同的比较器(实现的多样性)多次对这组值进行排序。
【问题讨论】:
标签: java sorting collections duplicates
我正在搜索可排序的(我的意思是在初始化后进行排序并且多次使用 Comparator 进行排序)Java 类集合,没有重复项。有没有比编写不透明的代码更纯粹的解决方案,例如阻止一些 ArrayList 添加另一个具有相同值的对象?
编辑 1: 我应该添加一些关于排序的解释。我需要使用不同的比较器(实现的多样性)多次对这组值进行排序。
【问题讨论】:
标签: java sorting collections duplicates
【讨论】:
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)
【讨论】:
最好扩展一个标准集合或从头开始实现一个。例如:
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 的 javadocs,然后真正考虑从头开始。
【讨论】: