JAVA中HashSet、TreeSet和LinkedHashSet的比較
- 2019 年 11 月 8 日
- 筆記
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_42449444/article/details/86365386
寫在前面:
嚶…嚶嚶,本菜雞隻會用C++的STL,通過前面的博文也可以看出來。我jio得非常有必要學習一下JAVA中的STL。好了,不瞎嗶嗶了。
說正經的:
我是站在C++的基礎上來理解JAVA的Set用法的,如果不知道C++中set用法的小夥伴請戳鏈接:某大佬的博客鏈接—C++中set的用法。
JAVA中常用的Set方法:
函數和用法 |
---|
add( ) 向集合中添加元素 |
clear( ) 去掉集合中所有的元素 |
contains( ) 判斷集合中是否包含某一個元素 |
isEmpty( ) 判斷集合是否為空 |
iterator( ) 主要用於遞歸集合,返回一個Iterator()對象 |
remove( ) 從集合中去掉特定的對象 |
size( ) 返回集合的大小 |
JAVA中的set有三種:HashSet,TreeSet和LinkedHashSet。
①HashSet的輸出順序是不確定的,但是它的速度最快;
②TreeSet輸出順序是升序排列的,相當於C++中的set,個人比較喜歡這種;
③LinkedHashSet輸出順序是確定的,就是插入時的順序。
Talk is cheap,show me the code!下面通過一段代碼來比較三者的性能:
import java.util.*; public class SetExample { public static void Cmp(Set s) { int[] a = {1,6,58,99,23,88}; long startTime = System.nanoTime(); //添加元素 for(int i = 0; i < a.length; i++) { s.add(a[i]); s.add(a[i]); s.add(a[i]); } //輸出元素 Iterator it = s.iterator(); while (it.hasNext()) { System.out.print(it.next() + " "); } long endTime = System.nanoTime(); long duration = endTime - startTime; //持續時間 System.out.println("耗時(單位:納秒):"+duration); } public static void main(String[] args) { //聲明三種Set Set<Integer> set1 = new HashSet(); Set<Integer> set2 = new TreeSet(); Set<Integer> set3 = new LinkedHashSet(); //比較三種Set的性能 //HashSet輸出順序是不確定的,但是速度最快 System.out.print("HashSet的輸出順序:"); Cmp(set1); //TreeSet輸出順序是升序排列的,相當於C++中的set System.out.print("TreeSet的輸出順序:"); Cmp(set2); //LinkedHashSet輸出順序是確定的,就是插入時的順序 System.out.print("LinkedHashSet的輸出順序:"); Cmp(set3); } }
運行代碼後結果如下:
HashSet的輸出順序:1 99 6 23 88 58 耗時(單位:納秒):263293 TreeSet的輸出順序:1 6 23 58 88 99 耗時(單位:納秒):554667 LinkedHashSet的輸出順序:1 6 58 99 23 88 耗時(單位:納秒):615202
參考鏈接:https://www.programcreek.com/2013/03/hashset-vs-treeset-vs-linkedhashset/。