我想創造,將篩選出的列表的所有非獨特成員的方法,所有的非唯一成員,使得與輸入卸下列表
3 5 3 8 8 2列表
將成爲
I H廣告的想法嘗試以下內容:
private static List<Integer> getUniques(List<Integer> list) {
for (Integer n : list) {
list.remove(n);
if (!list.contains(n)) {
list.add(n);
} else {
while (list.contains(n)) {
list.remove(n);
}
}
}
return list;
}
但是,這引發了併發修改異常。我做了一個工作調整:
private static List<Integer> getUniques(List<Integer> list) {
List<Integer> result = new ArrayList<>();
Set<Integer> distinctSet = new HashSet<>();
distinctSet.addAll(list);
result.addAll(list);
for (Integer n : distinctSet) {
result.remove(n);
if (!result.contains(n)) {
result.add(n);
} else {
while (result.contains(n)) {
result.remove(n);
}
}
}
return result;
}
這完成了我想要的,但似乎有點複雜/效率低下。我有沒有辦法以我想到的第一種方式來做到這一點?或者另一種更有效的方法呢?還是我已經基本上使用最好的方法?
使用Iterator遍歷列表,然後使用迭代器的remove方法http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html#remove()從列表中刪除元素 例如:http://www.java-examples.com/remove-element-collection-using-java-iterator-example – exexzian
迭代器沒有添加方法,所以不起作用。 – Legato