首页 > 代码库 > 你知道TreeSet会存储重复数据吗?
你知道TreeSet会存储重复数据吗?
private static final Set<Integer> treeSet=new TreeSet<Integer>();
Thread t1=new Thread(){
public void run(){
for (int i = 0; i < 50; i++) {
treeSet.add(i);
}
}
};
Thread t2=new Thread(){
public void run(){
for (int j = 0; j < 50; j++) {
treeSet.add(j);
}
}
};
t1.start();
t2.start();
Thread.currentThread().sleep(1000);
for (Integer integer : treeSet) {
int tem=0;
for (Integer integer2 : treeSet) {
if(integer==integer2){
tem++;
}
}
if(tem>1){
System.err.println("值:"+integer+",出现了:"+tem+"次");
continue;
}
tem=0;
}
}
结果是:
值:4,出现了:2次
值:4,出现了:2次
值:29,出现了:2次
值:29,出现了:2次
值:37,出现了:2次
值:45,出现了:2次
值:37,出现了:2次
值:45,出现了:2次
值:4,出现了:2次
值:4,出现了:2次
值:29,出现了:2次
值:29,出现了:2次
值:37,出现了:3次
值:45,出现了:2次
值:37,出现了:3次
值:37,出现了:3次
值:45,出现了:2次
由此可见,TreeSet在并发情况下会存入重复的数据。
解决办法,可以使用synchronized进行处理,保证每次只有一个线程操作TreeSet集合。
你知道TreeSet会存储重复数据吗?