set去重高效java_java之去重方式,以及效率问题

public static voidmain(String[] args) {

ArrayList arrayList = new ArrayList<>();long currentTimeMillis =System.currentTimeMillis();int f = 100000;for(int i = 0; i < f; i++){

arrayList.add(new User(""+i, "7878"));

}

Iterator iterator =arrayList.iterator();

Set hashSet = new HashSet<>();

LinkedList newList = new LinkedList<>();//第一种:set集合去重,不改变原有的顺序,根据username唯一标识去重

while(iterator.hasNext()){

User u=iterator.next();//根据set不能存放相同值的特性

if(!StringUtils.isEmpty(u.getUsername())){if(hashSet.add(u.getUsername())){//将其重新放入在LinkedList中

newList.add(u);

}

}

}long currentTimeMillis1_1 =System.currentTimeMillis();

System.out.println("第一种set集合去重,不改变原有的顺序:"+(currentTimeMillis1_1 -currentTimeMillis));//第二种:遍历后判断赋给另一个list集合,利用List的contains方法循环遍历

List listNew=new ArrayList<>();for(User str:arrayList) {if(!listNew.contains(str)){

listNew.add(str);

}

}long currentTimeMillis1_2 =System.currentTimeMillis();

System.out.println("第二种:遍历后判断赋给另一个list集合,利用List的contains方法循环遍历:"+(currentTimeMillis1_2 -currentTimeMillis1_1));//第三种:set去重

Set set = newHashSet();

List listNew2=new ArrayList<>();

set.addAll(arrayList);

listNew2.addAll(set);long currentTimeMillis1_3 =System.currentTimeMillis();

System.out.println(" 第三种:set去重"+(currentTimeMillis1_3 -currentTimeMillis1_2));//第四种:set去重(缩减为一行)

List listNew3=new ArrayList<>(newHashSet(arrayList));long currentTimeMillis1_4 =System.currentTimeMillis();

System.out.println("第四种:set去重(缩减为一行)"+(currentTimeMillis1_4 -currentTimeMillis1_3));//第五种:去重并按自然顺序排序

/*TreeSet treeSet = new TreeSet(arrayList);

List tempList = new ArrayList();

tempList.addAll(treeSet);

//List listNew4=new ArrayList<>(new TreeSet(arrayList));

long currentTimeMillis1_5 = System.currentTimeMillis();

System.out.println(currentTimeMillis1_5 - currentTimeMillis1_4);*/

//第六种:双重for循环,去重

for(int i = 0 ; i < arrayList.size() - 1; i ++){for(int j = arrayList.size() - 1; j > i; j --){if(arrayList.get(j).equals(arrayList.get(i))){

arrayList.remove(j);

}

}

}long currentTimeMillis1_6 =System.currentTimeMillis();

System.out.println("第六种:双重for循环,去重"+(currentTimeMillis1_6 -currentTimeMillis1_4));//第七种:利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序,所以只能作为判断条件

HashSet set2 = new HashSet<>(arrayList.size());

List result = new ArrayList<>(arrayList.size());for(User str3 : arrayList) {if(set2.add(str3)) {

result.add(str3);

}

}

arrayList.clear();

arrayList.addAll(result);long currentTimeMillis1_7 =System.currentTimeMillis();

System.out.println("第七种:利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序,所以只能作为判断条件"+(currentTimeMillis1_7 -currentTimeMillis1_6));//第八种:利用LinkedHashSet不能添加重复数据并能保证添加顺序的特性

LinkedHashSet set5 = new LinkedHashSet<>(arrayList.size());

set5.addAll(arrayList);

arrayList.clear();

arrayList.addAll(set5);long currentTimeMillis1_8 =System.currentTimeMillis();

System.out.println("第八种:利用LinkedHashSet不能添加重复数据并能保证添加顺序的特性"+(currentTimeMillis1_8 -currentTimeMillis1_7));

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值