如何在java中对重复项的对象列表进行排序?基本上每个对象在排序后应该在列表中是唯一的。也许有人知道一个很好的例子。
答案 0 :(得分:4)
您可以将List的元素添加到Set中,然后使用这些元素创建一个新List,如下所示:
List<Object> originalList = new ArrayList<Object>();
// the elements of originalList get added here
Set<Object> set = new HashSet<Object>(originalList);
List<Object> newList = new ArrayList<Object>(set);
请注意:
Object
作为List and Set的类型,将其替换为适合您需要的类型hashCode
和equals
答案 1 :(得分:2)
要获取列表中唯一元素的集合,您只需将所有元素添加到Set
。
List<String> l = new ArrayList<String>();
Set<String> s = new HashSet<String>(l);
答案 2 :(得分:1)
如果您只想删除重复项,请尝试以下操作:
List<Object> l; //Your list of data
for(int i = l.size()-1; i > 0; i--)
for(int j = i; j > 0; j--)
if(l.get(i).equals(l.get(j))) //or == for primitives
l.remove(j);
如果您要应用特定排序,则可以在for
语句后的同一if
循环内执行此操作。这真的是HashSet
的唯一优势。
答案 3 :(得分:1)
正如其他人已经指出的那样,您可以使用Set数据结构。但是,由于您正在寻找 排序 列表,而不是使用HashSet,您可以使用TreeSet,其元素默认按自然顺序排序
E.g:
List<Integer> list = new ArrayList<Integer>();
list.add(8);
list.add(5);
list.add(3);
list.add(5);
list.add(9);
Set<Integer> s = new TreeSet<Integer>(list);
Iterator<Integer> itr = s.iterator();
while(itr.hasNext()) {
System.out.print(itr.next() + " ");
}
输出:
3 5 8 9