常用集合類的繼承結構如下:Collection<--List<--VectorCollection<--List<--ArrayListCollection<--List<--LinkedListCollection<--Set<--HashSetCollection<--Set<--HashSet<--LinkedHashSetCollection<--Set<--SortedSet<--TreeSetMap<--TreeMapMap<--HashMap下面的表格是各個容器的特性一覽表:| Collection/Map | 接口 | 成員重復性 | 元素存放順序(Ordered/Sorted) | 元素中被調用的方法 | 基于那中數據結構來實現的 |
| HashSet | Set | Unique elements | No order | equals()hashCode() | Hash表 |
| LinkedHashSet | Set | Unique elements | Insertion order | equals()hashCode() | Hash表和雙向鏈表 |
| TreeSet | SortedSet | Unique elements | Sorted | equals()compareTo() | 平衡樹(Balanced tree) |
| ArrayList | List | Allowed | Insertion order | equals() | 數組 |
| LinkedList | List | Allowed | Insertion order | equals() | 鏈表 |
| Vector | List | Allowed | Insertion order | equals() | 數組 |
| HashMap | Map | Unique keys | No order | equals()hashCode() | Hash表 |
| LinkedHashMap | Map | Unique keys | Key insertion order/access order of entries | equals()hashCode() | Hash表和雙向鏈表 |
| Hashtable | Map | Unique keys | No order | equals()hashCode() | Hash表 |
| TreeMap | SortedMap | Unique keys | Sorted in key order | equals()compareTo() | 平衡樹(Balanced tree) |
| Collection/Map | 接口 | 成員重復性 | 元素存放順序(Ordered/Sorted) | 元素中被調用的方法 | 基于那中數據結構來實現的 |
| HashSet | Set | Unique elements | No order | equals()hashCode() | Hash表 |
| LinkedHashSet | Set | Unique elements | Insertion order | equals()hashCode() | Hash表和雙向鏈表 |
| TreeSet | SortedSet | Unique elements | Sorted | equals()compareTo() | 平衡樹(Balanced tree) |
| ArrayList | List | Allowed | Insertion order | equals() | 數組 |
| LinkedList | List | Allowed | Insertion order | equals() | 鏈表 |
| Vector | List | Allowed | Insertion order | equals() | 數組 |
| HashMap | Map | Unique keys | No order | equals()hashCode() | Hash表 |
| LinkedHashMap | Map | Unique keys | Key insertion order/Access order of entries | equals()hashCode() | Hash表和雙向鏈表 |
| Hashtable | Map | Unique keys | No order | equals()hashCode() | Hash表 |
| TreeMap | SortedMap | Unique keys | Sorted in key order | equals()compareTo() | 平衡樹(Balanced tree) |
1 、容器類和 Array的區別、擇取 * 容器類僅能持有對象引用(指向對象的指針),而不是將對象信息 copy 一份至數列某位置。 * 一旦將對象置入容器內,便損失了該對象的型別信息。2 * 在各種 Lists 中,最好的做法是以 ArrayList作為缺省選擇。當插入、刪除頻繁時,使用 LinkedList() ; Vector總是比 ArrayList 慢,所以要盡量避免使用。 * 在各種 Sets 中,HashSet 通常優于TreeSet (插入、查找)。只有當需要產生一個經過排序的序列,才用 TreeSet 。 TreeSet存在的唯一理由:能夠維護其內元素的排序狀態。 * 在各種 Maps 中 HashMap用于快速查找。 * 當元素個數固定,用 Array ,因為Array 效率是最高的。
結論:最常用的是ArrayList,HashSet,HashMap,Array。而且,我們也會發現一個規律,用TreeXXX都是排序的。
注意:1、Collection沒有get()方法來取得某個元素。只能通過iterator()遍歷元素。2、Set和Collection擁有一模一樣的接口。3、List,可以通過get()方法來一次取出一個元素。使用數字來選擇一堆對象中的一個,get(0)...。(add/get)4、一般使用ArrayList。用LinkedList構造堆棧stack、隊列queue。5、Map用 put(k,v) / get(k),還可以使用containsKey()/containsValue()來檢查其中是否含有某個key/value。6、Map中元素,可以將key序列、value序列單獨抽取出來。 使用keySet()抽取key序列,將map中的所有keys生成一個Set。 使用values()抽取value序列,將map中的所有values生成一個Collection。 為什么一個生成Set,一個生成Collection?那是因為,key總是獨一無二的,value允許重復。新聞熱點
疑難解答