qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Java -- 容器使用 Set, List, Map, Queue

           1. ArrayList
          ArrayList<String> c = new ArrayList<String>();
          c.add("hello");
          c.add("world");
          String a = new String("aya");
          c.add(a);
          for( Object obj : c  )
          {
          System.out.println( (String)obj );
          }
          c.set(2, "111");
          Iterator<String> it = c.iterator();
          while(it.hasNext())
          {
          System.out.println( (String)it.next() );
          }
          ArrayList 的迭代器還有 ListIterator 可以有正反兩種查詢,先hasNext知道最后 hasPrevious才能有值
          [java] view plaincopy
          ListIterator<String> it2 = c.listIterator();
          while(it2.hasNext())
          {
          System.out.println( "hasNext " + (String)it2.next() );
          }
          while(it2.hasPrevious())
          {
          System.out.println( "hasPrevious " + (String)it2.previous() );
          }
            2. HashSet 集合是無序的。
            HashSet集合判斷兩個元素相等的標準是兩個對象通過equals 方法比較相等,并且兩個對象的hashCode()方法返回值也相等。
            向HashSet中添加可變對象時,必須小心,如果修改HashSet集合中的對象有可能導致該對象與集合中其他對象相等,從而導致Hashset無法準確訪問該對象。

          3. TreeSet 集合有序
            由于TreeSet有序, 所有有訪問第一個,前一個,后一個,最后一個并可以截取子集。
            排序的順序并不是根據插入的順序,而是根據元素實際值來排序。
          TreeSet<Integer> nums = new TreeSet<Integer>();
          nums.add(4);
          nums.add(3);
          nums.add(2);
          nums.add(1);
          System.out.println(nums);  //整個集合
          System.out.println(nums.first());
          System.out.println(nums.last());
          System.out.println(nums.headSet(3)); //小于3,但不包括3
          System.out.println(nums.tailSet(3)); //大于等于3
          System.out.println(nums.subSet(1, 3));  大于等于1,小于3
            結果為
            [1, 2, 3, 4]
            1
            4
            [1, 2]
            [3, 4]
            [1, 2]
            TreeSet自然排序:根據元素大小,升序排列。 對于TreeSet判斷兩個元素相等的標準是,兩個對象通過equals方法比較返回true,并且通過compareTo(Object obj)比較 返回0。
            和HashSet一樣集合中為可變對象時,修改對象值后可能容易出錯,為了健壯性,HashSet和TreeSet推薦放入不可變對象。
            TreeSet定序排列: 使用comparator接口幫助。
            4. EnumSet 是一個專為枚舉類設計的集合類,其中所有的值都是指定枚舉類型的枚舉值。沒有暴露構造器,必須用靜態方法創建。
          enum Season
          {
          SPRING,SUMMER,FALL,WINTER;
          }
          public class Main {
          public static void main(String[] args) {
          EnumSet es1 = EnumSet.allOf(Season.class); //創建一個EnumSet集合,集合元素就是Season枚舉類的全部枚舉值
          System.out.println(es1);
          EnumSet es2 = EnumSet.noneOf(Season.class); //空集合,但指定其中的元素是Season類的枚舉值
          System.out.println(es2);
          es2.add(Season.SPRING);
          es2.add(Season.SUMMER);
          System.out.println(es2);
          EnumSet es3 = EnumSet.of(Season.SPRING, Season.SUMMER); // 以指定枚舉值創建EnumSet
          System.out.println(es3);
          EnumSet es4 = EnumSet.range(Season.SPRING, Season.FALL); // 范圍值
          System.out.println(es4);
          EnumSet es5 = EnumSet.complementOf(es4); //Season中 除去es4里剩下的部分 為es5
          System.out.println(es5);
          }
          }
            輸出結果:
            [SPRING, SUMMER, FALL, WINTER]
            []
            [SPRING, SUMMER]
            [SPRING, SUMMER]
            [SPRING, SUMMER, FALL]
            [WINTER]
            5. LinkedList 不僅可以當做雙向隊列使用,還可以當做“棧”使用,其包含有 pop出棧 和 push入棧 方法
          LinkedList<String> books = new LinkedList<String>();
          books.offer("test1");  //加入隊列尾部
          books.push("test2");   //入棧
          books.offerFirst("test3"); //放入頭部
          for(int i=0; i<books.size(); i++)
          {
          System.out.println( books.get(i) );
          }
          System.out.println( books.peekFirst() ); //訪問不刪除
          System.out.println( "log1: " + books );
          System.out.println( books.pollFirst() );  //訪問并刪除
          System.out.println( "log2: " + books );
            輸出結果:
            test3
            test2
            test1
            test3
            log1: [test3, test2, test1]
            test3
            log2: [test2, test1]
            6. Map
            HashMap 和 HashTable 判斷Value相等的條件只需要equals方法返回true即可,判斷Key相等的條件是equals()和hashCode()返回值都相等。
            LinkedHashMap以鏈表來維護內部順序。性能低于HashMap,消耗低于TreeMap。
            TreeMap key的排序也是根據紅黑樹排列,有兩種排序方式,自然排序和定制排序。
            WeekHashMap 只保留key對應對象的弱引用,可能被垃圾回收。
          enum Season
          {
          SPRING,SUMMER,FALL,WINTER;
          }
          public class Main {
          public static void main(String[] args) {
          HashMap<Integer, String> map1 = new HashMap<Integer, String>();
          map1.put(1, "hello");
          map1.put(2, "world");
          System.out.println(map1);
          System.out.println(map1.containsKey(3));
          System.out.println(map1.containsValue("world"));
          map1.put(2, "aya");
          System.out.println(map1);
          for(Map.Entry<Integer, String> m : map1.entrySet())
          {
          System.out.println(m);
          System.out.println(m.getKey());
          }
          EnumMap map2 = new EnumMap(Season.class);
          map2.put(Season.SPRING, "spring");
          map2.put(Season.SUMMER, "summer");
          System.out.println(map2);
          }
          }

          posted on 2013-11-04 13:05 順其自然EVO 閱讀(214) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年11月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 鹿邑县| 河西区| 闵行区| 雷山县| 汤原县| 寻甸| 达州市| 公主岭市| 长武县| 海林市| 永丰县| 恩平市| 云龙县| 无锡市| 宣城市| 新干县| 绍兴县| 尚志市| 台东县| 勐海县| 京山县| 莱芜市| 营口市| 太保市| 绥阳县| 万年县| 巴里| 石渠县| 广南县| 射阳县| 弥勒县| 鄂伦春自治旗| 丹寨县| 枣庄市| 泽普县| 甘南县| 嘉兴市| 砀山县| 高州市| 田阳县| 彭山县|