
?
01、使用两个for循环实现List去重(有序)
?
????/**使用两个for循环实现List去重(有序) ?????* ?????*?@param?list ?????*?*/ ????public?static?List?removeDuplicationBy2For(List<Integer>?list)?{ ????????for?(int?i=0;i<list.size();i++) ????????{ ????????????for?(int?j=i+1;j<list.size();j++) ????????????{ ????????????????if(list.get(i).equals(list.get(j))){ ????????????????????list.remove(j); ????????????????} ????????????} ????????} ????????return?list; ????}
02、使用List集合contains方法循环遍历(有序)
?
????/**使用List集合contains方法循环遍历(有序) ?????* ?????*?@param?list ?????*?*/ ????public?static?List?removeDuplicationByContains(List<Integer>?list)?{ ????????List<Integer>?newList?=new?ArrayList<>(); ????????for?(int?i=0;i<list.size();i++) ????????{ ????????????boolean?isContains?=newList.contains(list.get(i)); ????????????if(!isContains){ ????????????????newList.add(list.get(i)); ????????????} ????????} ????????list.clear(); ????????list.addAll(newList); ????????return?list; ????}
03、使用HashSet实现List去重(无序)
?
????/**使用HashSet实现List去重(无序) ?????* ?????*?@param?list ?????*?*/ ????public?static?List?removeDuplicationByHashSet(List<Integer>?list)?{ ????????HashSet?set?=?new?HashSet(list); ????????//把List集合所有元素清空 ????????list.clear(); ????????//把HashSet对象添加至List集合 ????????list.addAll(set); ????????return?list; ????}
04、使用TreeSet实现List去重(有序)
?
????/**使用TreeSet实现List去重(有序) ?????* ?????*?@param?list ?????*?*/ ????public?static?List?removeDuplicationByTreeSet(List<Integer>?list)?{ ????????TreeSet?set?=?new?TreeSet(list); ????????//把List集合所有元素清空 ????????list.clear(); ????????//把HashSet对象添加至List集合 ????????list.addAll(set); ????????return?list; ????}
05、使用java8新特性stream实现List去重(有序)
?
????/**使用java8新特性stream实现List去重(有序) ?????* ?????*?@param?list ?????*?*/ ????public?static?List?removeDuplicationByStream(List<Integer>?list)?{ ????????List?newList?=?list.stream().distinct().collect(Collectors.toList()); ????????return?newList; ????}
效率测试代码
?
????public?static?void?main(String?args[])?{ ????????List<Integer>?list1?=?new?ArrayList<>(); ????????List<Integer>?list2?=?new?ArrayList<>(); ????????List<Integer>?list3?=?new?ArrayList<>(); ????????List<Integer>?list4?=?new?ArrayList<>(); ????????List<Integer>?list5?=?new?ArrayList<>(); ????????Random?random?=new?Random(); ????????for?(int?i?=?0;?i?<?100000;?i++)?{ ????????????int?value?=random.nextInt(500); ????????????list1.add(value); ????????????list2.add(value); ????????????list3.add(value); ????????????list4.add(value); ????????????list5.add(value); ????????} ????????long?startTime?; ????????long?endTime; ????????startTime?=?System.currentTimeMillis(); ????????removeDuplicationByHashSet(list1); ????????endTime?=?System.currentTimeMillis(); ????????System.out.println("使用HashSet实现List去重时间:"+(endTime-startTime)+"毫秒"); ????????startTime?=?System.currentTimeMillis(); ????????removeDuplicationByTreeSet(list2); ????????endTime?=?System.currentTimeMillis(); ????????System.out.println("使用TreeSet实现List去重时间:"+(endTime-startTime)+"毫秒"); ????????startTime?=?System.currentTimeMillis(); ????????removeDuplicationByStream(list3); ????????endTime?=?System.currentTimeMillis(); ????????System.out.println("使用java8新特性stream实现List去重:"+(endTime-startTime)+"毫秒"); ????????startTime?=?System.currentTimeMillis(); ????????removeDuplicationBy2For(list4); ????????endTime?=?System.currentTimeMillis(); ????????System.out.println("使用两个for循环实现List去重:"+(endTime-startTime)+"毫秒"); ????????startTime?=?System.currentTimeMillis(); ????????removeDuplicationByContains(list5); ????????endTime?=?System.currentTimeMillis(); ????????System.out.println("使用List集合contains方法循环遍历:"+(endTime-startTime)+"毫秒"); ? ????}
结果:
更多测试结果
随机数在100范围内:
随机数在1000范围内:
随机数在10000范围内:
-
使用HashSet实现List去重时间:51毫秒
-
使用TreeSet实现List去重时间:103毫秒
-
使用java8新特性stream实现List去重:201毫秒
-
使用两个for循环实现List去重:5448毫秒
-
使用List集合contains方法循环遍历:791毫秒
结论
无序HashSet,有序TreeSet
Java 的知识面非常广,面试问的涉及也非常广泛,重点包括:Java 基础、Java 并发,JVM、MySQL、数据结构、算法、Spring、微服务、MQ 等等,涉及的知识点何其庞大,所以我们在复习的时候也往往无从下手,今天小编给大家带来一套 Java 面试题,题库非常全面,包括 Java 基础、Java 集合、JVM、Java 并发、Spring全家桶、Redis、MySQL、Dubbo、Netty、MQ 等等,包含 Java 后端知识点 2000 +?
资料获取方式:关注公众号:“程序员白楠楠”获取上述资料
?
? (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|