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)+"毫秒");
?
????}

结果:

  • 使用HashSet实现List去重时间:40毫秒
  • 使用TreeSet实现List去重时间:36毫秒
  • 使用java8新特性stream实现List去重:78毫秒
  • 使用两个for循环实现List去重:533毫秒
  • 使用List集合contains方法循环遍历:40毫秒

更多测试结果

随机数在100范围内:

  • 使用HashSet实现List去重时间:32毫秒
  • 使用TreeSet实现List去重时间:40毫秒
  • 使用java8新特性stream实现List去重:128毫秒
  • 使用两个for循环实现List去重:693毫秒
  • 使用List集合contains方法循环遍历:30毫秒

随机数在1000范围内:

  • 使用HashSet实现List去重时间:34毫秒
  • 使用TreeSet实现List去重时间:72毫秒
  • 使用java8新特性stream实现List去重:125毫秒
  • 使用两个for循环实现List去重:1063毫秒
  • 使用List集合contains方法循环遍历:85毫秒

随机数在10000范围内:

  • 使用HashSet实现List去重时间:51毫秒
  • 使用TreeSet实现List去重时间:103毫秒
  • 使用java8新特性stream实现List去重:201毫秒
  • 使用两个for循环实现List去重:5448毫秒
  • 使用List集合contains方法循环遍历:791毫秒

结论

无序HashSet,有序TreeSet

澳门新村邮编登入:最后

感谢大家看到这里,文章有不足,欢迎大家指出;如果你觉得写得不错,那就给我一个赞吧。

也欢迎大家关注我的公众号:程序员麦冬,每天更新行业资讯!