基礎內容##
容器就是一種裝其他各種對象的器皿。java.util包
容器:Set, List, Map ,數組。只有這四種容器。
Collection(集合) 一個一個往里裝,Map 一對一對往里裝。
Set:沒有順序,不可以重復。 List:有順序,可以重復。 互相的equals就算重復。
Map定義了存儲Key-Value的方法。
Collection里裝的必須都是Object,不能是基礎類型。比如Int類型的值分配在棧上,而棧上的內容都是動態的。
容器類對象在調用remove,cotains等方法時,需要比較對象是否相等,這會涉及到對象類型的equals方法和hashCode方法,對於自定義的類型,需要重寫equals方法和hashCode方法以實現自定義對象相等。
原則: 如果要重寫equals方法,那必須重寫hashCode方法。兩個對象互相equals,那這兩個對象必須具有相同的hashCode。
比較兩個對象是不是相等的時候,主要用的是equals方法,當對象用在Map里面作為鍵時用hashCode方法,這樣效率比較高。當對象當做鍵的時候,hashCode會有用。
兩個對象如果互相equals,那么他們的hashCode一定相等。
HashMap,Hashset,ArrayList以及LinkedList集合的區別,以及各自的用法##
HashMap:HashMap實現了Map接口,底層使用的是Hash算法存儲數據。HashMap將數據以鍵值對的方式存儲。
HashSet:HashSet實現了Set接口,底層也是用的是Hash算法存儲數據。而且HashSet內部有HashMap類型的成員變量,方法也調用了HashMap的方法,存儲的時候只不過值為null.
ArrayList:ArrayList實現了List接口,底層使用的是數組,存儲空間上是相鄰的,所以查詢起來會很方便,效率也會比LinkedList要高
LinkedList:實現了List接口,底層使用的是使用雙向鏈表的形式,存儲的數據在空間上很可能不相鄰,但是他們都有一個引用連在一起,所以增刪起來會很方便
Vector與ArrayList十分相似,區別就是就是vector是一種線程安全類,它的方法都帶有Synchronized關鍵字,實際中很少用到。如果遇到多線程的問題,JAVA提供了一個Collections工具類,可以把ArrayList轉換成線程安全的類。