请在downvote之前 - 阅读问题并查看示例 - 这不重复!
我想从Java中的ArrayList中删除每个重复的元素,如下所示:
Original list: [4, 2, 2, 3, 4, 1]
Set result: [1, 2, 3, 4]
Desired result: [1, 3]
重复的明显解决方案 - 设置在这里不起作用。
我的解决方案:
ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(5);
arrayList.add(1);
arrayList.add(5);
arrayList.add(1);
arrayList.add(5);
arrayList.add(2);
arrayList.add(3);
ArrayList<Integer> temp = new ArrayList<>(arrayList);
for(Integer number : new HashSet<Integer>(arrayList)){
temp.remove(number);
}
arrayList.removeAll(temp);
任何更聪明/更聪明的解决方案?
答案 0 :(得分:3)
有很多方法可以做你想做的事。这是一个(其中T是您现有List存储的类型):
Map<T, Integer>
。整数将用于存储项目在列表中显示的次数。即使对于大型列表,这种方法也会很快。
答案 1 :(得分:2)
或者,您也可以将频率检查为删除。 Collections.frequency(arrayList, number)
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(5);
arrayList.add(1);
arrayList.add(5);
arrayList.add(1);
arrayList.add(5);
arrayList.add(2);
arrayList.add(3);
ArrayList<Integer> unique = new ArrayList<>();
for (Integer number : arrayList) {
if (Collections.frequency(arrayList, number) == 1) {
unique.add(number);
}
}
System.out.println(unique);
}
答案 2 :(得分:1)
您可以使用循环检查ArrayList中的重复项,然后使用ArrayList上的remove()
删除元素。
请参阅以下内容:
{
ArrayList list;
// ...
while(true)
for(final Integer o : list) {
if(list.indexOf(o) != list.lastIndexOf(o)) {
while(list.remove(o));
continue;
}
break;
}
}
更改native更好的方法是使用临时Set
来存储要删除的对象:
{
ArrayList list;
TreeSet<Integer> set = new TreeSet<>(); // Use your Set!
// ...
for(final Integer o : list)
if(list.indexOf(o) != list.lastIndexOf(o))
set.add(o);
for(final Integer o : set)
while(list.remove(o));
}