集合接口在java.util這個包下。集合中主要有兩大接口(Collection和Map)
Collection是最基本的集合接口,一個Collection包含一組Object,即Collection的元素。遍歷Collection中的元素,可以使用Collection中的方法(Iterator),這個方法會返回迭代子,通過這個迭代子就可以訪問集合中的元素了。
Iterator ite = Collection.iterator();
while(ite.hasnext())
{
Object obj = ite.next();
}
由上圖看出,Collection派生的接口是Set、List、Queue.
List接口:
List通常表示一個列表,能保證元素的次序。裏面的元素可以重複。ArrayList、LinkedList實現了List接口。
ArrayList類實現了可變大小的數組,允許任何元素,每個ArrayList實例都有一定容量,裏面裝着數組元素,隨着數據的增大,這個容量可以增大。
LinkedList實現了List接口,允許null元素。LinkedList沒有同步的方法,多個線程訪問同一個LinkedList時,需要自己定義 同步方法。
Set接口:
Set通常表示一個集合,不允許元素重複,這個可以通過hashcode和equals來實現。Set接口不保證元素的次序。hashSet和TreeSet實現了這個接口。
HashSet : 它不允許出現重複元素;不保證和政集合中元素的順序,可以自己做個例子可以看出加入的字段順序跟遍歷出的不一樣,允許包含值爲null的元素,但最多只能有一個null元素(不允許重複)。
TreeSet : 可以實現排序等功能的集合,它在講對象元素添加到集合中時會自動按照某種比較規則將其插入到有序的對象序列中,並保證該集合元素組成按照“升序”排列。
a)(在對大量信息進行檢索的時候,TreeSet比AraayList更有效率,能保證在log(n)的時間內完成)。
b)TreeSet是是用樹形結構來存儲信息的,每個節點都會保存一下指針對象,分別指向父節點,左分支,右分支,相比較而言,ArrayList就是一個含有元素的簡單數組了,正因爲如此,它佔的內存也要比ArrayList多一些。
c)想TreeSet插入元素也比ArrayList要快一些,因爲當元素插入到ArrayList的任意位置時,平均每次要移動一半的列表,需要O(n)的時間, 而TreeSet深度遍歷查詢花費的實施只需要O(log(n))(普遍的都是,set查詢慢,插入快,list查詢快)
Map是個映射接口,有鍵值對(key--values)組成,TreeMap、HashMap、WeakHashMap都是直接實現了Map接口。
Hashmap 是一個 最常用的Map,它根據鍵的HashCode 值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最多隻允許一條記錄的鍵爲Null;允許多條記錄的值爲 Null;HashMap不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap;可能會導致數據的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力.
Hashtable 與HashMap類似,不同的是:它不允許記錄的鍵或者值爲空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導致了Hashtale在寫入時會比較慢。
LinkedHashMap保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的.在遍歷 的時候會比HashMap慢。
TreeMap能夠把它保存的記錄根據鍵排序,默認是按升序排序,也可以指定排序的比較器,當用Iterator 遍歷TreeMap時,得到的記錄是排過序的
注意:
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。
HashMap會利用對象的hashCode來快速找到key。
* hashing
哈希碼就是將對象的信息經過一些轉變形成一個獨一無二的int值,這個值存儲在一個array中。
我們都知道所有存儲結構中,array查找速度是最快的。所以,可以加速查找。
上面來自https://www.cnblogs.com/565261641-fzh/p/5659783.html