Java實現(xiàn)List去重的五種方法詳解
更新時間:2022年10月26日 10:32:03 作者:共飲一杯無
這篇文章主要為大家詳細介紹了Java中List去重的5種方法,文中的示例代碼講解詳細,具有一定的學習和參考價值,需要的小伙伴可以了解一下
在日常的業(yè)務開發(fā)中,偶爾會遇到需要將 List 集合中的重復數(shù)據(jù)去除掉的場景。這個時候可能有同學會問:為什么不直接使用 Set 或者 LinkedHashSet 呢?這樣不就沒有重復數(shù)據(jù)的問題了嘛?
不得不說,能提這個問題的同學很機智,一眼就看到了問題的本質。
但是,在實際的業(yè)務開發(fā)中遇到的情況會更復雜。
本文為大家總結了五個常用的List去重方式,希望有所幫助
通過HashSet去重(不保證順序)
public static List<String> getUserList() { List<String> userList = new ArrayList<>(); userList.add("小王"); userList.add("小張"); userList.add("小詹"); userList.add("小王"); userList.add("老王"); userList.add("小詹"); return userList; } /** * 通過HashSet去重(不保證順序) * 利用了Set的特性:元素不可重復,其底層原理是先計算每個對象的hash值,再比較元素值是否相同,如果相同,則保留最新的。 */ @Test public void removeRepeat1() { List<String> userList = getUserList(); System.out.println("去重前:" + userList); Set<String> hashSet = new HashSet<>(userList); List newList = new ArrayList(hashSet); System.out.println("去重后:" + newList); }
通過HashSet去重(保證順序)
/** * 通過HashSet去重(保證順序) */ @Test public void removeRepeat2() { List<String> userList = getUserList(); System.out.println("去重前:" + userList); Set set = new HashSet(); List newList = new ArrayList(); for (String str : userList) { if (set.add(str)) { newList.add(str); } } System.out.println("去重后:" + newList); }
遍歷后判斷賦給另一個list集合去重(保證順序)
/** * 遍歷后判斷賦給另一個list集合去重(保證順序) */ @Test public void removeRepeat3() { List<String> userList = getUserList(); System.out.println("去重前:" + userList); List<String> newList = new ArrayList<String>(); for (String str : userList) { if (!newList.contains(str)) { newList.add(str); } } System.out.println("去重后:" + newList); }
通過TreeSet去重(保證順序)
/** * 通過TreeSet去重(保證順序) * TreeSet集合實際上是利用TreeMap的帶有一個比較器參數(shù)的構造方法實現(xiàn),看JDK源碼很清晰,最重要的是這個參數(shù)Comparator接口 */ @Test public void removeRepeat4() { List<String> userList = getUserList(); System.out.println("去重前:" + userList); Set<String> treeSet = new TreeSet<>(); treeSet.addAll(userList); List newList = new ArrayList(treeSet); System.out.println("去重后:" + newList); }
Java8中Stream流處理(保證順序)
/** * Java8中Stream流處理(保證順序) * 首先獲得此list的Stream,然后調用distinct()方法。Java8中提供流的方式對數(shù)據(jù)進行處理,非常快,底層用的是forkJoin框架, * 提供了并行處理,使得多個處理器同時處理流中的數(shù)據(jù),所以耗時非常短。 */ @Test public void removeRepeat5() { List<String> userList = getUserList(); System.out.println("去重前:" + userList); List newList = userList.stream().distinct().collect(Collectors.toList()); System.out.println("去重后:" + newList); }
到此這篇關于Java實現(xiàn)List去重的五種方法詳解的文章就介紹到這了,更多相關Java List去重內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
一篇文章告訴你JAVA Mybatis框架的核心原理到底有多重要
yBatis的底層操作封裝了JDBC的API,MyBatis的工作原理以及核心流程與JDBC的使用步驟一脈相承,MyBatis的核心對象(SqlSession,Executor)與JDBC的核心對象(Connection,Statement)相互對應2021-06-06