集合類庫考慮到「容納自己物件」的問題,並將其分割成兩個明確的概念:
1:集合(collection):一組單獨的元素。乙個list(列表)必須按特定的順序容納元素,而乙個set(集)不可包含任何重複的元素。
2:對映(map):一系列「鍵-值」對,如雜湊表身上的充分體現。map可以和陣列一樣,擴充到多維,可以返回自己鍵的乙個set,乙個包含自己值的list或者包含自己"鍵值"對的乙個list.
集合只有三個集合元件:map,list,set。而且每個元件實際只有兩種或者三種的實現方式,通常只有一種特別好的方式。
一、collection
list和set是從collection中繼承過來的,collection中的方法在list以及set中都存在。
**list**藉口中實現了arrylist以及linkedlist.list(藉口),順序是list最重要的特性,可以保證元素按照規定的順序排列,同時它為collection新增大量方法,以便我們在list中部插入和刪除元素(只推薦對linkedlist這樣做)。list也會生成乙個listiterator(列表反覆器),利用它可在乙個列表裡朝兩個方向遍歷。
**arraylist**是乙個陣列後推得到的list.作為乙個常規用途的物件容器使用,替換了以前的vector。允許我們快速訪問元素,但在從列表中部插入和刪除元素時,速度稍慢。
**linkedlist**提供優化的順序訪問效能,同時可以高效率地在列表中部進行插入和刪除操作。但在進行隨機訪問時,速度相當慢。此時應該使用arraylist()。
**set**擁有與collection完全相同的介面,所以與兩種不同的list不同,它沒有什麼額外的功能。相反,set完全就是乙個collection,只是具有不同的行為。在這裡,乙個set只允許每個物件存在乙個例項。set(介面)新增到set的每個元素都必須是獨一無二的;否則就不會新增重複的元素。新增到set的物件必須定義equals(),從而建立物件的唯一性性。乙個set不能保證自己可按任何特定的順序維持自己的元素。
**hashset**,用於除非常小的以外所有set物件必須定義hashcode();
**arrayset**由乙個陣列後推得到set,面向非常小的set設計,特鄙視那些頻繁建立和刪除的。
二、map
**map**(介面)通常包含hashmap與arraymap.
**hashmap** 基於乙個雜湊表實現,用其代替hashtable。針對「鍵值」對的插入和檢索,這種形式具有最穩定性。
**arraymap**是乙個arraylist後推得到的map.對反覆的順序提供了精確的控制。面向非常小的map設計,特別是那些需要經常建立和刪除的。對於非常小的map,建立和反覆所付出的代價要比hashmap設計低的多。但不適合大的map.
三、如何進行合適的選擇
list:首選arraylist作為預設起點,若發現大量插入和刪除造成效能的降低,再考慮換成linkedlist
set:首選hashset,arrayset基本用不到。
map:常用hashmap。
JAVA集合類總結
所有的集合類都是先iterator介面,意味著所有的集合類都是可以迭代輸出的。以collection為介面的元素集合型別,以map為介面的對映集合型別 所有集合的實現類都不是直接實現集合類介面,而是都繼承乙個相應的抽象類。list list介面提供了多個實現的子類,其實現類有arraylist,li...
Java集合類自己總結
以下是常用子介面 arraylist01 public class arraylistdemo01 arraylist02 public class arraylistdemo02 arraylist03 public class arraylistdemo03 system.out.print n...
java 集合類 7 總結
vector 用arraylist代替vector。hashtable 用hashmap代替hashtable。satck 用linkedlist代替stack。properties hashtable和hashmap的區別 1.hashtable是dictionary的子類,hashmap是map...