參考文章:http://blog.sina.com.cn/s/blog_9b7559130100z1f4.html html
一:爲何會出現集合框架
由來:早期是沒有集合框架這一說的,由於當時有數組就能夠了。可是隨着Java的發展與市場的不斷需 數組
求,就出現了集合框架,好比數組時存儲基本數據類型的,固然也能夠存儲自定義類型,可是其長度必 安全
須是固定的,查詢刪除修改元素的時候,都必須經過角標。這就很不方便,爲何呢?由於你經過角操 框架
做數據,那麼你怎麼記着每一個具體元素對應的角標呢?好比一個數組中有{d,b,t,g},等過段時間後, spa
你怎麼知道t在數組中的那個問題呢?
因此Java在早期就出現了原始的集合Vector,因爲早期注重的是安全,因此其爲線程安全的。可是隨着 線程
市場需求的不斷增多,效率就成了社會的主流,這時Vector就不能知足需求,就須要有新的效率高的集 htm
合來代替。這就出現了集合框架,根據面向對象的思想,不可能讓一個集合具備全部的優勢,由於這不 對象
現實。 因此就出現了多個不一樣的集合,這些不一樣的集合都有各自的特色,但又有共同的方面,因此爲 blog
了讓他們有歸宿而且造成體系,就把他們共性的方面給抽取出來,造成他們的父類,讓特徵不一樣的集合 繼承
繼承,這樣就有了集合框架。
二:集合框架與數組的區別:
1:最大的區別集合框架存儲的是引用數據類型,不能是基本數據類型
2:集合的長度是可變的,數組的是不可變的
三:集合框架的體系結構
Collection
List Vector Set
ArrayList LinkedList HashSet TreeSet
LinkedHashSet
四:看體系的方法:
要看一個體系,首先要看的就是他們的最底層,因此咱們先看框架集合的祖宗Collection。。。。。。
1:Collection有什麼特色
規律一:凡是祖宗通常其必爲接口,遺憾的是Collection沒有逃脫這個規律,它也是接口。那麼接下來
咱們就要看這個接口(對象)
其特色:
1:長度可變(說明是數組)
2:元素能夠重複(因此有角標),所以第三點能夠不說
3:元素有角標
有哪些行爲呢?
一個類(對象)中無非要麼是方法(功能),要麼是屬性,要麼是兩者都有。遺憾的是Collection只有
功能(方法),因此接下來看看它有
什麼具體方法?
一個對象所具備的方法不過如下四類:增刪改查
1:增:
因此咱們先看Collection的增長的方法,試想若是是本身定義,參數是什麼,返回值是什麼?
若是是我定義的,確定須要參數,沒有返回值。這是我初次的想法,可是若是添加不成功怎麼辦?因此之
前的想法是錯的,必須有返回值可是返回值是什麼類型的好呢?試想,若是是int型的,添加成功返回1,
不成功返回0,這能夠。可是有另外一種更加好的返回類型,boolean型,成功返回true,不成功返回false,
這也能夠。
但爲何比int型更好呢?
由於咱們有時候沒必要寫返回值true與false,好比 return a>b;若是成功,本身就能夠返回true可是若是返
回的是int型,就需以下
if(a>b) return 1;
else 0;
這樣寫不但代碼繁瑣並且格式不優美,因此其add方法以下
boolean add(E e);//添加單個元素到集合中
boolean add(Collection<? extends T> c)//把一個集合中的元素添加到另一個集合中
2:刪
刪除集合中的元素:
覺得Collection補充了數組的不足,刪除元素經過對象,而不是角標返回值爲boolean
boolean remove(Object o);
boolean revoveAll(Collection<? extends T> c);//查找並移除集合中相同的元素
void clear();
3:查:
boolean contains(Object o)//元素是否包含在指定集合中
boolean contionsAll(Collection<? extends T> c);//參數集合是否包含的指定集合中
boolean isEmpty();//集合是否爲空
boolean retaionAll(Collection<? extends T> c);//查找並保留相同的元素
4:取
如何的把集合中的元素所有的取出來,是很是重要的一個方面,可是Collection也爲咱們提供好了功能
其參數是什麼呢?由於是取集合自身的元素,因此沒有參數。
可是返回值類型是什麼呢?
由於每一個子類的特色不同,因此他們存儲的數據也是不同的,因此致使他們的取出方式更是不同,
因此返回的應該是怎麼去元素的那個對象,即迭代器Iterator iterator()
5:其它功能
因爲數組胡集合有不少的相識型,因此集合就產生一個將集合轉爲數據的方法返回值理應爲Object型的數
組,不想要參數,由於涉及到的只是本身在轉變,如何轉只有本身知道,因此無參 Object[] toArray();
可是老是返回Object型的數組老是不舒服的,由於有時候咱們知道具體的返回值類型,因此方法以下
T[] toArray(T[] a);
注意:
在參數中能夠指定數組的長度也能夠不指定,若是指定的數組大小小於集合中的元素個數,則會從新建立一
個默認的能裝下集合元素的數組 若是指定的數組大了,則多餘的用null填充, 因此最好的是指定一個與集合元素個數相同的數