java集合你瞭解多少?

用了java集合這麼久,尚未系統的研究過java的集合結構,今天親自畫了下類圖,總算有所收穫。java

 

1、全部集合都實現了Iterable接口。數組

    Iterable接口中包含一個抽象方法:Iterator<T> iterator();每一個實現了這個方法的集合都會返回一個Iterator對象。安全

    Iterator:它包含三個方法,hashNext(),next(),remove()三種方法,經過它們能夠實現集合的遍歷和元素刪除,例如:微信

    Collection<String> list = new ArrayList<String>();函數

   list.add("a");   spa

   list.add("b");  線程

    list.add("c");對象

    Iterator<String> iterator = list.iterator();blog

    while (iterator.hasNext()) {  排序

         String element = iterator.next();

          System.out.println(element);//a b c

    }  

    System.out.println(list);//[a, b, c]      iterator = list.iterator();    iterator.next();

    iterator.remove();

    System.out.println(list);//[b, c]

    ps:爲何不直接實現Iterator接口呢?由於:Iterator會攜帶當前集合的位置信息,下次使用再使用的時候就非從0開始了;而Iterable接口每次都返回一個Iterator對象(經過內部類實現Iterator),各個迭代器之間互不影響。

 

2、ListIterator

 

    從AbstractList起封裝了public ListIterator<E> listIterator()方法,返回一個ListIterator,它在Iterator的基礎上增長了add(),previous(),hasPrevious()等方法,能夠實現雙向遍歷。

AbstractList<String> list = new ArrayList<String>();

list.add("a");

list.add("b");

list.add("c");

ListIterator<String> iterator = list.listIterator(3);

while (iterator.hasPrevious()) {

String element = iterator.previous();

System.out.println(element);//c,b,a

}

 

3、比較

    ArrayList:容許存放重複元素,且元素是有序的,隨機訪問比較方便。

    LinkedList:鏈表實現,插入和刪除時更優於ArrayList。

    HashSet:不容許重複元素且無序(散列函數對元素進行排序,可快速查詢),容許null值。

    TreeSet:紅黑樹排序,可進行排序,包含的元素要實現Comparable接口並定義compareTo方法,不容許null值。

    HashMap:線程不安全,key和值都容許null,判斷是否包含key要使用containsKey()方法,不容許重複key,hash數組的默認大小是16,並且必定是2的指數,從新計算hash值。

    HashTable:線程安全,key和value都不容許出現null值,不容許重複key,數組默認大小是11,增長的方式是 old*2+1,使用包含對象的hash值。

 

4、Collections和Arrays

    Collections:java.util下的一個專用類,它包含有各類有關集合操做的靜態方法,可實現對各類集合的搜索、排序、線程安全化等操做。

    Arrays:java.util下的一個專用類,用來操做array ,提供搜索、排序、複製,轉換等靜態方法。

 

關注老薑談技術,微信號:helojava,或者掃描下面二維碼。

每日一帖,技術雞湯。

相關文章
相關標籤/搜索