排序并删除重复项后,在ArrayList中维护订单

时间:2015-05-26 11:47:41

标签: java eclipse arraylist

您好我想将字符串添加到ArrayList,然后对其进行排序以删除重复项。该顺序应该与我添加这些字符串的方式相同。 我想要的:[randomtext,testtext,anothertext] 我得到的:[anothertext,randomtext,testtext]

这是可能的还是有更简单的方法?

    ArrayList<String> abc = new ArrayList();

    abc.add("randomtext");
    abc.add("testtext");
    abc.add("anothertext");
    abc.add("randomtext");
    abc.add("testtext");
    abc.add("anothertext");
    abc.add("randomtext");
    abc.add("testtext");
    abc.add("anothertext");

    Collections.sort(abc);      
    for (int i = 1; i < abc.size() ; i++) 
    {
        if(abc.get(i) == abc.get(i-1))
        {
            abc.remove(i);
            i -= 1;
        }
    }
    System.out.print(abc);

2 个答案:

答案 0 :(得分:2)

最好的方法是确保在向列表添加内容时不添加重复项。

if(!myList.contains(item)){
  myList.add(item);
}

如果您从方法/类的范围之外收到List,那么最简单的可能是将内容添加到LinkedHashSet以消除重复项,然后将其取回。 LinkedHashSet维持秩序。

LinkedHashSet<String> set = new LinkedHashSet<>();
set.addAll(myList); // assuming myList is List<String>
myList.clear();
myList.addAll(set);

编辑:我的回答是基于你的陈述(我强调的是强调)

  

您好我想将字符串添加到ArrayList,然后对其进行排序以删除重复项。 顺序应该保持与添加字符串相同的方式。< / p>

因此,您只需要排序以删除重复项。我的回答避免了排序,并将负担放在LinkedHashSet上。

答案 1 :(得分:-1)

试试这个(将List转换为LinkedHashSet

 Set<String> a = new LinkedHashSet<String>(abc);
 System.out.println(a);