java List去重方式及效率對比


 

對List去重並保證添加順序主要有三種方式:

方式一,利用HashSet不能添加重復數據的特性 由於HashSet不能保證添加順序,所以只能作為判斷條件:

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

方式二,利用LinkedHashSet不能添加重復數據並能保證添加順序的特性 :

private static void removeDuplicate(List<String> list) { LinkedHashSet<String> set = new LinkedHashSet<String>(list.size()); set.addAll(list); list.clear(); list.addAll(set); }

 

方式三,利用List的contains方法循環遍歷:

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

准備測試程序:

private static void main(String[] args) { final List<String> list = new ArrayList<String>(); for (int i = 0; i < 1000; i++) { list.add("haha-" + i); } long time = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { removeDuplicate(list); } long time1 = System.currentTimeMillis(); System.out.println("time1:"+(time1-time)); for (int i = 0; i < 10000; i++) { removeDuplicate2(list); } long time2 = System.currentTimeMillis(); System.out.println("time2:"+(time2-time1)); for (int i = 0; i < 10000; i++) { removeDuplicate3(list); } long time3 = System.currentTimeMillis(); System.out.println("time3:"+(time3-time2)); }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM