<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 和風細雨 閱讀(454) 評論(0)  編輯  收藏 所屬分類: J2SE

    主站蜘蛛池模板: 国产a v无码专区亚洲av| 亚洲A丁香五香天堂网| 亚洲成年人在线观看| a视频在线观看免费| 亚洲精品国产精品乱码视色| 国产乱妇高清无乱码免费| 亚洲中文字幕无码一区二区三区| 污视频网站在线观看免费| 国产精品亚洲综合一区| a级成人免费毛片完整版| 亚洲av永久无码精品漫画| 67pao强力打造高清免费| 亚洲一卡二卡三卡四卡无卡麻豆| 91成人免费观看| 激情综合亚洲色婷婷五月| 免费观看的毛片手机视频| 国产亚洲精品精品精品| 亚洲宅男天堂在线观看无病毒| 99视频免费播放| 在线亚洲午夜片AV大片| 免费h成人黄漫画嘿咻破解版| 黄色a级免费网站| 亚洲an天堂an在线观看| 野花高清在线电影观看免费视频| 亚洲色偷偷色噜噜狠狠99| 亚洲国产一区二区三区| 久久午夜夜伦鲁鲁片无码免费| 亚洲国产日韩在线成人蜜芽 | aa级女人大片喷水视频免费| 日本亚洲成高清一区二区三区| 免费国产黄网站在线观看| xxx毛茸茸的亚洲| 亚洲性久久久影院| 亚洲av永久无码精品古装片| 一级毛片正片免费视频手机看| 国产亚洲高清不卡在线观看| 2022久久国产精品免费热麻豆| 亚洲日本中文字幕天天更新| 亚洲av成人一区二区三区在线观看 | 天天拍拍天天爽免费视频| 好猛好深好爽好硬免费视频|