<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    和風細雨

    世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

    集合綜述

    1.Collection接口

    Java集合類中最基礎的接口是Collection,它定義了兩個基本方法:
    Public interface Collection<E>{
        boolean add(E element);
        Iterator<E> iterator();
    }
    add是向Collection中添加一個元素,當添加的內容確實對Collection發生了有效變更的話add方法返回真,否則返回假,比如你向一個Set添加重復的元素時,Set內容不會變化,add方法會返回假。
    iterator方法返回實現了Iterator接口的對象,你可以借此對Collection中的內容進行挨個遍歷。

    2.Iterator接口

    Iterator有三個方法:
    Public interface Iterator<E>{
       E next();
       boolean hasNext();
       void remove();
    }
    通過重復調用next方法,你可以挨個遍歷Collection中的元素。然而,當遍歷到Collection末端時,此方法會拋出一個NoSuchElementException異常,因此在遍歷時你就需要hasNext方法和next方法配合使用。 hasNext方法在當前遍歷位置后仍有元素時會返回真。配合例子如下:
    Collection<String> c=….;
    Iterator<String> iterator=c.iterator();
    While(iterator.hasNext()){
           String str=iterator.next();
          …….
    }
    remove方法能刪除上一次調用next時指向的元素,注意不能連續兩次調用remove方法,否則會拋出IllegalStateException.

    3.Collection接口的其它方法

    int size():返回當前存儲的元素個數
    boolean isEmpty():當集合中沒有元素時返回真
    boolean contains(Object obj):當集合中有元素和obj值相等時返回真.
    boolean containsAll(Collection<?> other):當集合包含另一集合的全部元素時返回真.
    bBoolean addAll (Collection<? extends E> other):把其它集合中的元素添加到集合中來,當此集合確實發生變化時返回真.
    boolean remove(Object obj):刪除一個和obj值相等的元素,當吻合的元素被刪除時返回真.
    boolean removeAll(Collection<?> other) :從本集合中刪除和另一集合中相等的元素,當本集合確實發生變化時返回真.(差集)
    void clear():清除集合中的所有元素
    boolean retainAll(Collection<?> other) :從本集合中刪除和另一集合中不相等的元素,當本集合確實發生變化時返回真.(交集)
    Object[] toArray()
    返回由集合中元素組成的數組

    4.實現了Collection接口的具體類

    ArrayList:帶下標的隊列,增加和收縮時都是動態的.
    LinkedList:有序隊列,在任意位置插入和刪除都是高效的.
    HashSet:不存在重復的非排序集合.
    TreeSet:自動排序的不存在重復的集合.
    LinkedHashSet:保持了插入時順序的哈希表
    PriorityQueue:優先級隊列,能有效的刪除最小元素.

    5.沒有重復元素存在的集合HashSet

    HashSet通過哈希碼來查找一個元素,這比鏈表的整體查找要迅速得多,但是由此帶來的缺陷時它不能保持插入時的順序.
    由于HashSet靠hash碼來識別元素,因此它不能包含重復元素,當集合中已經存在值相等的元素時,再次添加同樣的元素HashSet不會發生變化.

    Set<String> hashSet=new HashSet<String>();
    hashSet.add("Andy");
    hashSet.add("Andy");
    hashSet.add("Bill");
    hashSet.add("Cindy");
    hashSet.add("Bill");
    hashSet.add("Cindy");

    Iterator<String> iter=hashSet.iterator();

    while(iter.hasNext()){
            System.out.println(iter.next());
    }
    輸出:
    Cindy
    Andy
    Bill

    6.自動排序的集合 TreeSet

    TreeSet和HashSet類似但它值得一提的一點是無論你以何順序插入元素,元素都能保持正確的排序位置,這時因為TreeSet是以紅黑樹的形式存儲數據,在插入時就能找到正確的位置.注意插入TreeSet的元素都要實現Comparable接口.
    例:
    SortedSet<String> treeSet=new TreeSet<String>();
    treeSet.add("Andy");
    treeSet.add("Andy");
    treeSet.add("Bill");
    treeSet.add("Cindy");
    treeSet.add("Bill");
    treeSet.add("Cindy");

    Iterator<String> iter=treeSet.iterator();

    while(iter.hasNext()){
           System.out.println(iter.next());
    }

    輸出:
    Andy
    Bill
    Cindy

    7.優先級隊列PriorityQueue

    PriorityQueue使用一種名為堆的二叉樹高效的存儲數據,它檢索數據是按排序的順序而插入則隨意,當你調用remove方法時,你總能得到最小的元素.但PriorityQueue并不按序排列它的元素,當你遍歷時它是不會排序的,這也沒有必要. 在制作一個按優先級執行日程安排或事務安排時你應該首先想到PriorityQueue。
    例:
    PriorityQueue<String> pq=new PriorityQueue<String>();
    pq.add("Cindy");
    pq.add("Felix");
    pq.add("Andy");
    pq.add("Bill");

    Iterator<String> iter=pq.iterator();

    while(iter.hasNext()){
          System.out.println(iter.next());
    }

    while(!pq.isEmpty()){
          System.out.println(pq.remove());
    }

    8.保持插入順序的哈希表LinkedHashMap

    從1.4起Java集合類中多了一個LinkedHashMap,它在HashMap的基礎上增加了一個雙向鏈表,由此LinkedHashMap既能以哈希表的形式存儲數據,又能保持查詢時的順序.
    Map<String,String> members=new LinkedHashMap<String,String>();

    members.put("001", "Andy");
    members.put("002", "Bill");
    members.put("003", "Cindy");
    members.put("004", "Dell");

    Iterator<String> iter=members.keySet().iterator();

    while(iter.hasNext()){
          System.out.println(iter.next());
    }

    Iterator<String> iter2=members.values().iterator();

    while(iter2.hasNext()){
          System.out.println(iter2.next());
    }

    9.自動按鍵進行排序的哈希表TreeMap

    Map<String,String> members=new TreeMap<String,String>();

    members.put("001", "Andy");
    members.put("006", "Bill");
    members.put("003", "Cindy");
    members.put("002", "Dell");
    members.put("004", "Felex");

    for(Map.Entry<String,String> entry:members.entrySet()){
          System.out.println("Key="+entry.getKey()+"                      Value="+entry.getValue());
    }


    10.1 集合工具類Collections的方法unmodifiable

    此方法構建一個不可更改的集合視圖,當使用其修改方法時會拋出一個UnsupportedOperationException
    static Collection<E> unmodifiableCollection(Collection<E> c)
    static List<E> unmodifiableList (List<E> c)
    static Set<E> unmodifiableSet (Set<E> c)
    static SortedSet<E> unmodifiableSortedSet (SortedSet<E> c)
    static Map<K,V> unmodifiableMap (Map<K,V>  c)
    static SortedMap<K,V> unmodifiableSortedMap (SortedMap<K,V> c)

    10.2 集合工具類Collections的方法synchronized

    此方法會返回一個線程安全的集合視圖
    static Collection<E> synchronizedCollection(Collection<E> c)
    static List<E> synchronizedList (List<E> c)
    static Set<E> synchronizedSet (Set<E> c)
    static SortedSet<E> synchronizedSortedSet (SortedSet<E> c)
    static Map<K,V>  synchronizedMap (Map<K,V>  c)
    static SortedMap<K,V>  synchronizedSortedMap (SortedMap<K,V>  c)


    集合類靜態類圖

    posted on 2008-03-04 08:33 和風細雨 閱讀(465) 評論(0)  編輯  收藏 所屬分類: J2SE

    主站蜘蛛池模板: 两个人看的www视频免费完整版| 亚洲一级特黄特黄的大片| 成人免费无码视频在线网站| 亚洲国产成人片在线观看无码| 一个人看的在线免费视频| 国产91精品一区二区麻豆亚洲 | 亚洲精品国产啊女成拍色拍| 免费人成在线观看网站| 亚洲a一级免费视频| 91福利免费体验区观看区| 亚洲无线一二三四区| 久久国产免费福利永久| 亚洲一区二区三区免费在线观看| 国产高清不卡免费在线| 亚洲日韩看片无码电影| 国产精品免费无遮挡无码永久视频 | 永久黄网站色视频免费| 亚洲av综合日韩| 亚洲人成网站色在线入口| eeuss影院免费92242部| 亚洲精品国产精品乱码视色| 国产精品免费看久久久| 亚洲中文字幕无码av在线| 无码人妻精品一二三区免费| 久久精品亚洲日本波多野结衣| 免费一级一片一毛片| 中国性猛交xxxxx免费看| 亚洲成AV人综合在线观看| 成人a免费α片在线视频网站 | 国产亚洲免费的视频看| 91精品免费高清在线| 亚洲精品永久在线观看| 国产av无码专区亚洲av果冻传媒| 亚洲天堂免费在线| avtt亚洲天堂| 120秒男女动态视频免费| 亚洲AV无码男人的天堂| 国产亚洲人成网站在线观看不卡| 222www免费视频| 免费看一级高潮毛片| 亚洲图片在线观看|