總結一下java裡的Collections

來源:互聯網
上載者:User

java 的集合類包含兩部分,一部分是實現了介面Collection的類,另一部分是實現了介面Map的類.注意雖然後者沒有實現Collection介面,但是它們都是Collections(不是Collection)的一部分.
下面的內容基於jdk1.5以上.其中用到了泛型.
下面之所以列出它們的方法,是為了讓大家瞭解一下它們的規律
先看實現了Collection的類.
它的方法主要可以分為:1.添加,刪除 2.查詢 3.其他
1.添加,刪除: boolean add(Object),boolean addAll(Collection<? extends E>)
       boolean remove(Object) ,boolean removeAll(Collection<?>),boolean retainAll(Collection<?>),void clear()
2.查詢. 查詢操作不能直接進行,而只能通過Iterator來操作.方法iterator()用來返回一個作為內部類實現的Iterator<T>.用返回的這個Iterator的hasNext()和next()來進行查詢集合裡的內容.
3.其他 有查詢大小的size(),有將集合轉換為數組的Object[] toArray()和<T> T[] toArray(T[]),還有從Object類繼承過來的equals()和hashCode(),還有判斷是不是空的isEmpty(),boolean contains(Object o),boolean containsAll(Collection<?> c) 
總共15個方法

1.再來看它的子介面List<T>
List<T>的主要特點(這些特點是相對於Collection的另一子介面Set<T>來說的)是它可以存放重複的元素,而且裡面的元素是按序存放的.基於這些特點,List<T>除了上面從Collection繼承過來的方法以外,還增加了以下根據索引添加刪除的方法:
add(int index,Object),addAll(int index,Collection<? extends E> c)
remove(int index)
因為有了索引,所以查詢可以直接進行,而不必通過Iterator<T>了
get(int index),set(int index,E element)
indexOf(Object) lastIndexOf(Object)
ListIterator<E> listIterator(),ListIterator<E> listIterator(int index)
 ListIterator<E>相對於Iterator<E>來說,多了從後往前遍曆的功能.所以它又多了previous(),hasPrevious()兩個主要方法.另外還有
 nextIndex()和previousIndex();以及set(E o),remove();
List<E> subList(int fromIndex, int toIndex)
再來看實現了List<T>的類
1.1 ArrayList<T>
它在List<T>的基礎上增加了以下方法:
void ensuerCapacity( int minCapacity )
void trimToSize()
Object clone()
protected void removeRange(int from, int to)
ArrayList<T>的特點(相對於下面要說到的其他List<T>實作類別)是元素在裡面是按添加的順序存放的
1.2 LinkedList<T>
它和ArrayList<T>一樣,元素在裡面是按添加的順序存放的.在隨機獲得元素方面相對慢一點,而在添加刪除元素方面,它比ArrayList<T>要快.因為它有以下的方法:
void addFirst(Object),void addLast(Object),E removeFirst(),E removeLast()
E getFirst(),E getLast()
 E element() 找到但不移除此列表的頭(第一個元素)。
 E peek()  找到但不移除此列表的頭(第一個元素)。
 E poll()  找到並移除此列表的頭(第一個元素)。
 boolean offer(E o)  將指定元素添加到此列表的末尾(最後一個元素)。
1.3 Vector<T>
這個還是和上面兩個類有著同樣的特點,即可以存放重複的元素,元素在裡面是按添加的順序存放的.不同的是,這個類的實現是安全執行緒的.在修改,移除,添加和擷取元素四種操作上,它在LinkedList<T>的基礎上(但它不是LinkedList<T>的子類.這裡說在"它的基礎上",只是因為它們的方法有很多的相似)增加了一些方法,這些方法在名字,參數順序和傳回值都不同,但是功能是一樣的
修改:void setElementAt(E,int index)[E set(int index,E o)]
移除:void removeElementAt(int index)[E remove(int index)]
添加:void insertElementAt(E, int index)[E add(int index,E o)]
void addElement(E o)
boolean removeElement(Object)
void removeAllElements()
擷取:
E elementAt(int index)[E get(int index)]
 E firstElement() ,E lastElement()
方括弧裡的是List<T>裡定義的方法
以上三個類都有一個無參的和一個以Collection<? extends E> c為參數的建構函式

List<T>還有其他一些實作類別,這裡就不說了.
下面來看Set<T>
Set<T>的特點和數學上的集合一樣,不可以存放重複的元素,這也是它和List<T>的不同.它和List<T>的另一個不同是,它的實作類別大多以有序的方式存放元素,而不是以添加元素的順序存放.
Set<T>的方法都是從它的父介面Collection<T>繼承過來的
下面來看它的實作類別
2.1 HashSet<E>
它按元素的hashCode()來對元素進行降排序之後進行有序存放
它的方法都是在介面Set<E>裡的
2.1.1 LinkedHashSet<E>
如果要按添加順序存放元素,就可以用這個類.LinkedHashSet<E>是HashSet<E>的子類
2.2 SortedSet<E>
這是一個介面,不是一個類.它的功能是,可以通過Comparator<E>類或Comparable<E>介面自訂元素的存放順序.
它的方法除了從父介面繼承過來的以外,還有:
Comparator<E> comparator()
E first(),E last()
SortedSet<E> headSet(E toElement),SortedSet<E> tailSet(E fromElement)
SortedSet<E> subSet(E toElement,E fromElement)
2.2.1 TreeSet<E>
SortedSet<E>的實作類別,它的方法都是從介面SortedSet<E>繼承過來的
2.3 EnumSet<E>
這是一個和枚舉類型一起使用的專用的Set<E>的實作類別
它沒有建構函式,而且它的所有方法都是static的.
它的方法有:
<E extends EnumSet<E>> EnumSet<E> allOf( Class<E> elementType )
<E extends EnumSet<E>> EnumSet<E> noneOf( Class<E> elementType )
<E extends EnumSet<E>> EnumSet<E> complementOf( EnumSet<E> enumSet )
<E extends EnumSet<E>> EnumSet<E> copyOf( EnumSet<E> enumSet )
<E extends EnumSet<E>> EnumSet<E> copyOf( Collection<E> c )
<E extends EnumSet<E>> EnumSet<E> of( E e)
<E extends EnumSet<E>> EnumSet<E> of( E e1,E e2)
<E extends EnumSet<E>> EnumSet<E> of(E first, E... rest)
<E extends EnumSet<E>> EnumSet<E>  range(E from, E to)

Collection的子介面和實作類別到此告一段落,現在來看Map<K,V>
Map<K,V>的功能是實現從鍵到值的映射.和Set<E>一樣,它不可以包含重複的鍵(鍵所映射的值可以相同)
它的方法有:
添加:
V put(K key,V value)
void putAll(Map<? extends K,? extends V> t) 
刪除:
V remove(Object key),void clear() 
查詢:
V get(Object key) 
與Collection<E>的轉換:
Set<K> keySet() ,Collection<V> values()
注意前面說過,它不能包含重複的鍵,而鍵所映射的值可以相同.所以這裡對鍵返回沒有重複元素的Set介面,而對value返回可以有重複元素的Collection<E>
Set<Map.Entry<K,V>> entrySet()
 一個Map.Entry<K,V>類執行個體代表著一個索引值映射 .它的方法有:
 boolean equals(Object o)
  K getKey()
  V getValue()
 int hashCode()
 V setValue(V value)
Map<K,V>的其他方法:
boolean containsKey(Object key) ,boolean containsValue(Object value) 
boolean equals(),int hashCode(),boolean isEmpty()
int size()

下面來看Map<K,V>的實作類別
1.1 HashMap<K,V>
它對應於HashSet<E>,特點也一樣,就是元素的存放順序是按索引值的降序存放的
它的方法都是從Map<K,V>繼承過來的
1.1.1 LinkedHashMap<K,V>
它對應於LinkedHashSet<E>,特點也是元素是按添加順序存放的
1.2 SortedMap<K,V>
它對應於SortedSet<E>,通過Comparator<E>類或Comparable<E>介面自訂元素的存放順序.
方法也和SortedSet<E>一樣,基本上只要將方法裡的set換成map就行了,如下:
Comparator<E> comparator()
K firstKey(),K lastKey()
SortedMap<K,V> headMap(K toKey),SortedMap<K,V> tailSet(K fromKey)
SortedMap<K,V> subMap(K toKey,E fromKey)
1.2.1 TreeMap<K,V>
對應於TreeSet<E>,SortedMap<K,V>的實作類別,它的方法都是從介面SortedMap<K,V>繼承過來的
1.3 EnumMap<K extends Enum<K>,V>
主要的特點是,它的鍵必須是某一枚舉類型的元素

Map<K,V>還有很多的其他實作類別,這裡就不說了

另外還有兩個類要注意: Collections類和Arrays類
這裡只說一下Arrays類:
它主要用於對數組進行操作.它的方法都是static的,它有幾大類的方法
1.尋找
int binarySearch(T[] a,T valueToFind)
其中T可以是任何原生類型或類類型
另外,還可以指定比較子,
<T> int binarySearch(T[] a, T key, Comparator<? super T> c)
2.填充
對數組進行填充
void fill(T[] a,T value)
其中T可以是任何原生類型或類類型
還可以指定填充範圍
void fill(T[] a, int fromIndex, int toIndex, T val)
3.比較兩數組是否包含完全一樣的元素
boolean equals(T[] a,T[] b )
4.對數組進行排序
void sort( T[] a )
void sort( T[] a ,int fromIndex, int toIndex)
void sort( T[] a ,Comparator c)
void sort( T[] a ,int fromIndex, int toIndex,Comparator c)
其中T可以是任何原生類型
5.將數群組轉換為字串
String toStrint(T[] a)
其中T可以是任何原生類型
6.將數群組轉換為List<E>
<T> List<T> asList(T... a)

在我的部落格的其他文章裡,有對上面講到的部分內容進行舉例.

=======================================
歡迎指正,歡迎評論,歡迎交流 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.