日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

List去除重复数据的几种方式和性能比较

發(fā)布時(shí)間:2024/1/8 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 List去除重复数据的几种方式和性能比较 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下介紹5種去除Java中ArrayList中的重復(fù)數(shù)據(jù)

1. 使用LinkedHashSet刪除arrayList中的重復(fù)數(shù)據(jù)

LinkHashSet是在一個(gè)ArrarList刪除重復(fù)數(shù)據(jù)的最佳方法.LinkHaseSet在內(nèi)部完成兩件事

  • 刪除重復(fù)數(shù)據(jù)
  • 保持添加到其中的數(shù)據(jù)的順序
import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List;public class Temp {public static void main(String[] args) {List<Integer> numbersList=new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8));System.out.println(numbersList);LinkedHashSet<Integer> hashSet=new LinkedHashSet<>(numbersList);System.out.println(hashSet);} }

輸出效果

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8] [1, 2, 3, 4, 5, 6, 7, 8]

2.使用Java8新特性stream進(jìn)行List去重

要從arrayList中刪除重復(fù)項(xiàng),我們也可以使用java 8 stream api ,使用stream中distinct()方法返回一個(gè)由不同數(shù)據(jù)組成的流,通過對(duì)象的equals() 方法進(jìn)行比較
收集所有區(qū)域數(shù)據(jù)List使用Collectors.toList()
Java程序,用于在不是用Set的情況下重java中的arrayList中刪除重復(fù)項(xiàng)

List<Integer> numbersList=new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8));System.out.println(numbersList);List<Integer> listWithoutDuplicates = numbersList.stream().distinct().collect(Collectors.toList());System.out.println(listWithoutDuplicates);

輸出效果

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8] [1, 2, 3, 4, 5, 6, 7, 8]

3.利用HashSet不能添加重復(fù)數(shù)據(jù)的特性,由于HaseSet不能保證添加的順序,所以只能作為判讀條件保證順序

public static void removeDuplicate(List<Integer> list) {HashSet<Integer> set = new HashSet<>(list.size());List<Integer> result = new ArrayList<>(list.size());for (Integer item : list) {if (set.add(item)) {result.add(item);}}list.clear();list.addAll(result);}

輸出效果

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8] [1, 2, 3, 4, 5, 6, 7, 8]

4.利用List的contains方法循環(huán)遍歷,重寫排序,只添加一次數(shù)據(jù),避免重復(fù)

public static void removeDuplicate(List<Integer> list) {List<Integer> result = new ArrayList<>(list.size());for (Integer item : list) {if (!result.contains(item)) {result.add(item);}}list.clear();list.addAll(result);}

輸出效果

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8] [1, 2, 3, 4, 5, 6, 7, 8]

5.雙重for循環(huán)去重

for (int i = 0; i < numbersList.size(); i++) {for (int j = i + 1; j < numbersList.size(); j++) {if (numbersList.get(i) == numbersList.get(j)) {numbersList.remove(numbersList.get(i));}}}

輸出結(jié)果

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8] [1, 2, 3, 4, 5, 6, 7, 8]

6.使用TreeSet實(shí)現(xiàn)List去重(有序)

public static List removeDuplicationByTreeSet(List<Integer> list) {TreeSet set = new TreeSet<>(list);// 把list集合所有元素清空list.clear();list.addAll(set);return list;} [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8] [1, 2, 3, 4, 5, 6, 7, 8]

7.使用HashSet實(shí)現(xiàn)List去重(無序)

/**使用HashSet實(shí)現(xiàn)List去重(無序)** @param list* */public static List removeDuplicationByHashSet(List<Integer> list) {HashSet set = new HashSet(list);//把List集合所有元素清空list.clear();//把HashSet對(duì)象添加至List集合list.addAll(set);return list;}

性能比較

package com.sth;import java.util.*; import java.util.stream.Collectors;public class Temp {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實(shí)現(xiàn)List去重時(shí)間:" + (endTime - startTime) + "毫秒");startTime = System.currentTimeMillis();removeDuplicationByTreeSet(list2);endTime = System.currentTimeMillis();System.out.println("使用TreeSet實(shí)現(xiàn)List去重時(shí)間:" + (endTime - startTime) + "毫秒");startTime = System.currentTimeMillis();removeDuplicationByStream(list3);endTime = System.currentTimeMillis();System.out.println("使用java8新特性stream實(shí)現(xiàn)List去重:" + (endTime - startTime) + "毫秒");startTime = System.currentTimeMillis();removeDuplicationBy2For(list4);endTime = System.currentTimeMillis();System.out.println("使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重:" + (endTime - startTime) + "毫秒");startTime = System.currentTimeMillis();removeDuplicationByContains(list5);endTime = System.currentTimeMillis();System.out.println("使用List集合contains方法循環(huán)遍歷:" + (endTime - startTime) + "毫秒");}public static List removeDuplicationByTreeSet(List<Integer> list) {TreeSet set = new TreeSet<>(list);// 把list集合所有元素清空list.clear();list.addAll(set);return list;}/*** 使用HashSet實(shí)現(xiàn)List去重(無序)** @param list*/public static List removeDuplicationByHashSet(List<Integer> list) {HashSet set = new HashSet(list);//把List集合所有元素清空list.clear();//把HashSet對(duì)象添加至List集合list.addAll(set);return list;}/*** 使用java8新特性stream實(shí)現(xiàn)List去重(有序)** @param list*/public static List removeDuplicationByStream(List<Integer> list) {List newList = list.stream().distinct().collect(Collectors.toList());return newList;}/*** 使用兩個(gè)for循環(huán)實(shí)現(xiàn)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;}/*** 使用List集合contains方法循環(huán)遍歷(有序)** @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;} }

輸出

隨機(jī)數(shù)字100內(nèi)
使用HashSet實(shí)現(xiàn)List去重時(shí)間:1毫秒 使用TreeSet實(shí)現(xiàn)List去重時(shí)間:1毫秒 使用java8新特性stream實(shí)現(xiàn)List去重:74毫秒 使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重:2毫秒 使用List集合contains方法循環(huán)遍歷:0毫秒
隨機(jī)數(shù)字1000內(nèi)
使用HashSet實(shí)現(xiàn)List去重時(shí)間:3毫秒 使用TreeSet實(shí)現(xiàn)List去重時(shí)間:3毫秒 使用java8新特性stream實(shí)現(xiàn)List去重:76毫秒 使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重:18毫秒 使用List集合contains方法循環(huán)遍歷:4毫秒
隨機(jī)數(shù)字10000內(nèi)
使用HashSet實(shí)現(xiàn)List去重時(shí)間:6毫秒 使用TreeSet實(shí)現(xiàn)List去重時(shí)間:8毫秒 使用java8新特性stream實(shí)現(xiàn)List去重:77毫秒 使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重:38毫秒 使用List集合contains方法循環(huán)遍歷:14毫秒
隨機(jī)數(shù)字100000內(nèi)
使用HashSet實(shí)現(xiàn)List去重時(shí)間:22毫秒 使用TreeSet實(shí)現(xiàn)List去重時(shí)間:28毫秒 使用java8新特性stream實(shí)現(xiàn)List去重:86毫秒 使用兩個(gè)for循環(huán)實(shí)現(xiàn)List去重:711毫秒 使用List集合contains方法循環(huán)遍歷:51毫秒

總結(jié)

以上是生活随笔為你收集整理的List去除重复数据的几种方式和性能比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。