Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          HashSet、LinkedHashSet和TreeSet

          Posted on 2009-05-31 00:03 啥都寫點 閱讀(1689) 評論(0)  編輯  收藏 所屬分類: J2SE
          關鍵技術:
          • HashSet采用散列函數對元素進行排序,是專門為快速查詢而設計的。存入HashSet的對象必須定義hashCode方法。
          • TreeSet采用紅黑樹的數據結構進行排序元素,使用它可以從Set中提取有序(升序或者降序)的序列。需要注意的是,存入自定義類時,TreeSet需要維護元素的存儲順序,因此自定義類要實現Comparable接口并定義compareTo方法。
          • LinkedHashSet內部使用散列以加快查詢速度,同時使用鏈表維護元素插入的次序,在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。

          package book.arrayset;

          import java.util.ArrayList;
          import java.util.HashSet;
          import java.util.Iterator;
          import java.util.LinkedHashSet;
          import java.util.List;
          import java.util.Set;
          import java.util.TreeSet;

          /**
           * 演示各種Set的使用
           * 存入Set的每個元素必須是唯一的,因為Set不保存重復元素。
           
          */
          public class TestSet {

              
          /**
               * 初始化Set的元素
               * 
          @param set
               
          */
              
          public static void init(Set set){
                  
          if (set != null){
                      set.add(
          "aaa");
                      set.add(
          "ccc");
                      set.add(
          "bbb");
                      set.add(
          "eee");
                      set.add(
          "ddd");
                  }
              }
              
          /**
               * 輸出set的元素
               * 
          @param set
               
          */
              
          public static void output(Set set){
                  
          if (set != null){
                      
          //使用迭代器遍歷Set,也只有這一種方法
                      Iterator it = set.iterator();
                      
          while (it.hasNext()){
                          System.out.print(it.next() 
          + " ");
                      }
                  }
                  System.out.println();
              }
              
          /**
               * 使用HashSet
               
          */
              
          public static void testHashSet(){
                  Set mySet 
          = new HashSet();
                  init(mySet);
                  System.out.println(
          "使用HashSet: ");
                  output(mySet);
              }
              
          /**
               * 使用TreeSet
               
          */
              
          public static void testTreeSet(){
                  Set mySet 
          = new TreeSet();
                  init(mySet);
                  System.out.println(
          "使用TreeSet: ");
                  output(mySet);
              }
              
          /**
               * 使用LinkedHashSet
               
          */
              
          public static void testLinkedHashSet(){
                  Set mySet 
          = new LinkedHashSet();
                  init(mySet);
                  System.out.println(
          "使用LinkedHashSet: ");
                  output(mySet);
              }
              
          public static void main(String[] args) {
                  TestSet.testHashSet();
                  TestSet.testTreeSet();
                  TestSet.testLinkedHashSet();
                  
                  Set mySet 
          = new HashSet();
                  init(mySet);
                  
          //Set不允許元素重復
                  mySet.add("aaa");
                  mySet.add(
          "bbb");
                  System.out.println(
          "為mySet加入aaa, bbb元素后: ");
                  output(mySet);
                  
          //刪除元素
                  mySet.remove("aaa");
                  System.out.println(
          "mySet刪除aaa元素后: ");
                  output(mySet);
                  
          //增加另外一個集合中的所有元素
                  List list = new ArrayList();
                  list.add(
          "aaa");
                  list.add(
          "aaa");
                  list.add(
          "fff");
                  mySet.addAll(list);
                  System.out.println(
          "mySet添加另外一個集合的所有元素后: ");
                  output(mySet);
                  
          //刪除除了另外一個集合包含的以外的所有元素
                  mySet.retainAll(list);
                  System.out.println(
          "mySet刪除除了另外一個集合包含的以外的所有元素后: ");
                  output(mySet);
                  
          //刪除另外一個集合包含的所有元素
                  mySet.removeAll(list);
                  System.out.println(
          "mySet刪除另外一個集合包含的所有元素后: ");
                  output(mySet);
                  
          //獲取Set中元素的個數
                  System.out.println("mySet中當前元素的個數: " + mySet.size());
                  
          //判斷Set中元素個數是否為0
                  System.out.println("mySet中當前元素為0?  " + mySet.isEmpty());
                  
                  
          /**
                   * (1)Set不允許重復元素,因此加入Set的Object必須定義equals()方法以確保對象的唯一性。
                   * (2)HashSet采用散列函數對元素進行排序,是專門為快速查詢而設計的。存入HashSet的對象必須定義hashCode()。
                   * (3)TreeSet采用紅黑樹的數據結構進行排序元素,能保證元素的次序,使用它可以從Set中提取有序的序列。
                   * 需要注意的是,生成自己的類時,Set需要維護元素的存儲順序,因此要實現Comparable接口并定義compareTo()方法。
                   * (4)LinkedHashSet內部使用散列以加快查詢速度,同時使用鏈表維護元素的插入的次序,在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。
               
          */
              }
          }


                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 应用必备| 莱西市| 镇远县| 兴安盟| 杭锦旗| 农安县| 竹北市| 若尔盖县| 滁州市| 安顺市| 资溪县| 奎屯市| 磐安县| 达州市| 焉耆| 祁连县| 邵阳市| 舟曲县| 吴桥县| 文成县| 江门市| 察雅县| 连平县| 黔西县| 道孚县| 元谋县| 丹寨县| 东阿县| 闻喜县| 米脂县| 平舆县| 大兴区| 德江县| 政和县| 吉木乃县| 收藏| 柘城县| 临洮县| 修水县| 定西市| 抚顺县|