如何为重复项排列对象列表

时间:2011-12-10 23:10:28

标签: java

如何在java中对重复项的对象列表进行排序?基本上每个对象在排序后应该在列表中是唯一的。也许有人知道一个很好的例子。

4 个答案:

答案 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的类型,将其替换为适合您需要的类型
  • 要使上述内容正常工作,列表中的对象必须覆盖hashCodeequals
  • 新列表中的元素与原始列表中的元素的顺序不同

答案 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