qileilove

          blog已經(jīng)轉(zhuǎn)移至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集合判斷兩個元素相等的標(biāo)準(zhǔn)是兩個對象通過equals 方法比較相等,并且兩個對象的hashCode()方法返回值也相等。
            向HashSet中添加可變對象時,必須小心,如果修改HashSet集合中的對象有可能導(dǎo)致該對象與集合中其他對象相等,從而導(dǎo)致Hashset無法準(zhǔn)確訪問該對象。

          3. TreeSet 集合有序
            由于TreeSet有序, 所有有訪問第一個,前一個,后一個,最后一個并可以截取子集。
            排序的順序并不是根據(jù)插入的順序,而是根據(jù)元素實際值來排序。
          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
            結(jié)果為
            [1, 2, 3, 4]
            1
            4
            [1, 2]
            [3, 4]
            [1, 2]
            TreeSet自然排序:根據(jù)元素大小,升序排列。 對于TreeSet判斷兩個元素相等的標(biāo)準(zhǔn)是,兩個對象通過equals方法比較返回true,并且通過compareTo(Object obj)比較 返回0。
            和HashSet一樣集合中為可變對象時,修改對象值后可能容易出錯,為了健壯性,HashSet和TreeSet推薦放入不可變對象。
            TreeSet定序排列: 使用comparator接口幫助。
            4. EnumSet 是一個專為枚舉類設(shè)計的集合類,其中所有的值都是指定枚舉類型的枚舉值。沒有暴露構(gòu)造器,必須用靜態(tài)方法創(chuàng)建。
          enum Season
          {
          SPRING,SUMMER,FALL,WINTER;
          }
          public class Main {
          public static void main(String[] args) {
          EnumSet es1 = EnumSet.allOf(Season.class); //創(chuàng)建一個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); // 以指定枚舉值創(chuàng)建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);
          }
          }
            輸出結(jié)果:
            [SPRING, SUMMER, FALL, WINTER]
            []
            [SPRING, SUMMER]
            [SPRING, SUMMER]
            [SPRING, SUMMER, FALL]
            [WINTER]
            5. LinkedList 不僅可以當(dāng)做雙向隊列使用,還可以當(dāng)做“棧”使用,其包含有 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 );
            輸出結(jié)果:
            test3
            test2
            test1
            test3
            log1: [test3, test2, test1]
            test3
            log2: [test2, test1]
            6. Map
            HashMap 和 HashTable 判斷Value相等的條件只需要equals方法返回true即可,判斷Key相等的條件是equals()和hashCode()返回值都相等。
            LinkedHashMap以鏈表來維護(hù)內(nèi)部順序。性能低于HashMap,消耗低于TreeMap。
            TreeMap key的排序也是根據(jù)紅黑樹排列,有兩種排序方式,自然排序和定制排序。
            WeekHashMap 只保留key對應(yīng)對象的弱引用,可能被垃圾回收。
          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 閱讀(215) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          <2013年11月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 木兰县| 金平| 江陵县| 平武县| 余姚市| 苏尼特左旗| 舒兰市| 贞丰县| 南郑县| 和顺县| 新巴尔虎右旗| 紫阳县| 清徐县| 桃园市| 榆社县| 阳高县| 顺义区| 阿拉尔市| 墨脱县| 安宁市| 蒙城县| 平潭县| 河西区| 南充市| 兰溪市| 尼勒克县| 江安县| 牙克石市| 宜宾县| 大同县| 定陶县| 玛沁县| 开原市| 梅州市| 翼城县| 大丰市| 义乌市| 郧西县| 平罗县| 永宁县| 裕民县|