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/