Java集合----基本架構
集合類的由來:
對象用於封裝特有數據,對象多了需要存儲,如果對象的個數不確定。
就使用集合容器進行存儲
集合特點:
1.用於存儲對象的容器
2.集合的長度可變
3.集合中不可以存儲基本數據類型
集合與數組的區別:
集合是可變長度的,而數組時不可變的
二、Java提供的集合類的基本架構
常用的就這兩個接口,當然類可不止這些。
|--Collection接口(單列集合)
|--List接口
|--ArrayList
|--LinkedList
|--Set接口
|--HashSet
|--LinkedHashSet
|--TreeSet
|--Map接口(雙列集合)
|--HashMap
|--LinkedHashMap
|--TreeMap
|--Hashtable
|--Properties
三、Collection接口
集合層次結構 中的根接口。Collection 表示一組對象,這些對象也稱為 collection 的元素。一些
collection 允許有重復的元素,而另一些則不允許。一些 collection 是有序的,而另一些則是無序的。
JDK 不提供此接口的任何直接 實現:它提供更具體的子接口(如 Set 和 List)實現。此接口通常用來傳遞
collection,並在需要最大普遍性的地方操作這些 collection。
Collection接口的常用方法:
1.添加。
boolean add(Object obj);
boolean addAll(Collection coll);
2.刪除。
boolean remove(Object obj);
boolean removeAll(Collection coll);
void clear();
3.判斷:
boolean contains(Object obj);
boolean containsAll(Collection coll);
4.獲取:
int size();
Iterator iterator();取出元素的方式:叠代器
5.其它:
boolean retainAll(Collection coll);取交集。
Object[] toArray()將集合轉成數組。
四、List接口
他是Collection接口的子接口,它的最大特點是具有角標,因此該集合數據的插入是有序的,
並且可以根據角標精確控制數據的位置。下面是它的實現類的比較:
|--Vector:內部是數組數據結構,是同步的,幾乎不用了。 jdk1.0出現的 兩倍延長(增刪查詢都很慢)
|--ArrayList:內部是數組數據結構,是不同步的。替代了Vector。 1.5倍延長(增刪速度比較慢,查
找速度很快)
|--LinkedList:內部是鏈表數據結構,是不同步的。(增刪快,查找慢)LinkedList也是有角標的,因為
他是List接口的子類,List最大的特點就是有角標
五、set接口
也是Collection集合的子接口,它不具有角標,數據也是無序的,並且元素不允許重復。下面是他的實現
類:
|--HashSet:內部數據結構是哈希表,是不同步的。
確定元素是否相同:
(1):判斷兩個元素的哈希值是否相同。如果相同,再判斷兩個對象的內容是否相同
註:判斷哈希值相同,其實判斷的是對象的hashcode()的方法。判斷內容相同,用的是equals方法
註意:如果哈希值不同,是不需要判斷equals的
哈希沖突:哈希值相同,內容不同。哈希會進行順延存儲或者重新算一個位置進行存儲
|--TreeSet:
它的底層是二叉樹,使用元素的自然順序進行排序,是不同步的
存自定義對象時必須實現Comparable接口
判斷元素的唯一性方式:就是根據返回值來判斷,如果返回為0就視為元素相同
TreeSet對元素進行排序的方式一:
讓元素自身具備比較功能,就需要實現Comparable接口。覆蓋comparaTo方法
TreeSet集合的排序方式二:
讓集合自身具備比較功能,使用比較器,定義一個類實現Comparator接口,覆蓋compare方法,將該類對象作為參數
傳遞給TreeSet集合的構造函數
|--LinkedHashSet:有序且不重復。是HashSet的擴展
六、Map接口
一次添加一對元素。Collection一次添加一個元素,Map也稱為雙列集合。Collection也稱為單列集合
其實Map集合中存儲的就是鍵值對,Map集合中必須保證鍵的唯一性。下面是他的實現類:
|--Hashtable:內部結構是哈希表,是同步的。不允許null作為鍵作為值
|--Properties:一般用於存儲配置文件的鍵和值。十分常用
|--HashMap:內部結構是哈希表,不是同步的。允許null作為鍵作為值
|--LinkedHashMap:內部結構為鏈表加哈希表,有序,怎麽存進去怎麽取出來
|--TreeMap:內部結構是二叉樹,不是同步的。可以對Map集合中的鍵進行排序
Java集合----基本架構