集合Conllection的基本概念:
1、集合的基本認識:如StringBuffer&StringBuilder是集合(存儲的對象類型是String)。數組、對象與其很相似,但是還有區別。
2、集合的由來:對象用於封裝特有數據,對象多了需要存儲,如果對象的個數不確定,就需要使用集合來進行存儲。
3、集合的特點:
(1)用於存儲對象的容器;即集合中存儲的元素是對象
(2)集合的長度是可變的;
(3)集合是不可以存儲基本數據類型的;(集合存儲基本數據類型時會先進行自動封裝成其對應的對象后再進行存儲)
4、集合框架體系:
集合是用於存儲對象的容器。而每種容器內部都有其獨特的數據結構,正因為不同的容器內部數據結構不同,使其各自有自己獨特的使用場景。雖然每個
容器有其獨特的結構但是類似的容器還是存在共性的(至少對容器內部對象的操作方法上是存在共性的),所以這些共性方法能被不斷抽取,最終形成了集合框架體系。
5、集合框架的頂層接口(根接口):Collection
Collection的常見方法:
(1)添加
boolean add(E o);
boolean add(Collection<? extends E> c);
(2)刪除
boolean remove(Object o);
boolean removeAll(Collection<? extends E> c)
void clear();
(3)判斷
a.判斷集合中是否有元素:boolean isEmpty();
b.判斷集合中是否包含某個元素:boolean contains(Object o);
c.判斷集合中是否包含某些元素:boolean contains(Collection<?> c);
(4)獲取
a.獲取集合中元素個數:int size();
b.遍歷集合中所有元素:Iterator<E> iterator();
c.判斷兩個集合中是否存在相同的元素並保留兩個集合中相同的元素刪除不同的元素:boolean retainAll(Collection<?> c);
(5)其他
將集合中元素轉為數組:a. Ojbect[] toArray();
b. <T> T[] toArray(); 泛型
6、迭代器 Iterator
(1)通過集合對象獲取其對應的Iterator對象;
(2)判斷是否存在下一個元素;
(3)取出該元素並將迭代器對象指向下一個元素;
Iterator iterator():取出元素的方式:迭代器。
該對象必須依賴於具體容器,因為每一個容器的數據結構都不同。
所以該迭代器對象是在容器中進行內部實現的。
對於使用容器者而言,具體的實現不重要,只要通過容器獲取到該實現的迭代器的對象即可,也就是iterator方法。
7、Collection兩大體系:鏈表List、集合Set
List特點:元素有序;元素可以重復;元素都有索引(角標)
Set 特點:元素無序;元素不可以重復;
List特有的常見方法:有一個共性就是可以操作角標。
8、List三大常用集合:
Vector:內部是數組數據結構,是同步的(線程安全的)。增刪查詢都很慢。
ArrayList:內部是數組數據結構,是不同步的(線程不安全的)。替代了Vector。查詢速度快,增刪比較慢。
LinkedList:內部是鏈表數據結構,是不同步的(線程不安全的)。增刪元素速度快。
其中,ArrayList最常用。
9、Set常用集合:
Set中方法與Collection一致。
(1)HashSet:內部數據結構是哈希表,是不同步的。
Set集合中元素都必須是唯一的,HashSet作為其子類也需保證元素的唯一性。
判斷元素唯一性的方式:
通過存儲對象(元素)的hashCode和equals方法來完成對象唯一性的。
如果對象的hashCode值不同,那么不用調用equals方法就會將對象直接存儲到集合中;
如果對象的hashCode值相同,那么需調用equals方法判斷返回值是否為true,
若為false, 則視為不同元素,就會直接存儲;
若為true, 則視為相同元素,不會存儲。
PS:如果要使用HashSet集合存儲元素,該元素的類必須覆蓋hashCode方法和equals方法。
一般情況下,如果定義的類會產生很多對象,通常都需要覆蓋equals,hashCode方法。建立對象判斷是否相同的依據。
(2)TreeSet:保證元素唯一性的同時可以對內部元素進行排序,是不同步的。
判斷元素唯一性的方式:
根據比較方法的返回結果是否為0,如果為0視為相同元素,不存;如果非0視為不同元素,則存。
TreeSet對元素的排序有兩種方式:
方式一:使元素(對象)對應的類實現Comparable接口,覆蓋compareTo方法。這樣元素自身具有比較功能。
方式二:使TreeSet集合自身具有比較功能,定義一個類實現Comparable接口覆蓋其compareTo方法。(相當於自定義了一個比較器)
將該類對象作為參數傳遞給TreeSet集合的構造函數。(TreeSet(Comparator<? super E> c) )