private static void removeDuplicate(List<String> list) {
LinkedHashSet<String> set = new LinkedHashSet<String>(list.size());
set.addAll(list);
list.clear();
list.addAll(set);
}
使用linkedhashset实现List集合去重
这里有个地方要注意,add操作是添加元素的引用,那么这意味着如果你改变了该元素,list中对应的元素也被改变了
而addAll操作则是拷贝,当你改变元素,list中对应的元素仍不变
public static void main(String[]args){
Set<String> set = new HashSet<String>();
for(int i= 0;i<6;i++){
set.add(i+"");
}
set.add("3"); //重复数据,不会写入
set.add(null); //可以写入空数据
Iterator<String> iter = set.iterator();
// iter.remove();
System.out.println("!!!"+iter);
System.out.println("!!!"+iter.next());
System.out.println("!!!"+iter.next());
while(iter.hasNext()){
System.out.println(iter.next());
iter.remove();//输出是无序的
System.out.println(iter);
}
}
通过运行程序可以发现,iter.next()是迭代器向前进1,然后输出当前val
而iter.remove是,输出当前val,然后回到上一位置
每个set都有个head,如果输出一次,删除一次,那么每次删除后,都会回到head!
当对head执行remove操作时,无任何效果!
特别需要注意的是,list<int[]>a.contains(new int[]{1,2})比较的是地址,不是内容!!!