黑馬程序員-第十四天(集合框架)

---------------------- ASP.Net+Unity開發.Net培訓、期待與您交流! ---------------------

一,爲什麼出現集合類?
面嚮對象語言對事物的體現是以對象的形式,所以爲了方便對多個對象的操作,就對對象進行存儲
集合就是存儲對象最用的一種方式。

二,數組和集合類同是容器,有何不同?
數組雖然可以存儲對象,但長度是固定的,集合長度是可變的,數組中可以存儲基本數據類型,集合只能存儲對象。

三,集合的特點?
集合只用於存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。


四。爲什麼會出現這麼多的容器?
因爲每個容器對數據的存儲方式都有不同,這個存儲方式稱之爲:數據結構。

五,collection接口中的共性方法:
獲取長度 :
int size();
添加:boolean add(E e)
boolean addAll(Collection c)
清空: clear();
移除:boolean remove(Object o)
boolean removeAll(Collection c) 刪除與c相同的元素。
判斷:boolean contains(Object o)是否包含指定的元素。
boolean contains(Collection c)
boolean equals(Object o)比較collection與指定對象是否相等。
bollean isEmpty()判斷此集合中是否有元素。根據size()返回值判斷。

集合變數組:
Object[] toArray();
取交集
boolean retainAll(Collection c)此集合會保留與c集合相同的元素。

六。注意:
·add方法參數類型是object,以便於接收任意類型的對象。
·集合中存儲的都是對象的引用或者是地址


七,集合中的元素獲取

Iterator  iterator():獲取迭代器,用於取出集合中的元素。
Iterator類中的方法
boolean hasNext()判斷是否還有下一個元素。
next()取出一下元素。

1,什麼是迭代器?
就是取出集合元素的一種方式。
2,迭代器取出方式的設計?
就把取出方式定義在集合的內部 ,這樣取出方式就可以直接訪問集合內容的元素,那麼取出方式
就被定義成了內部類,而每一個容器的數據結構不同,所以取出的動作細節也不一樣,但是都有共性內容
判斷和取出,那麼可以其共性抽取。那麼這些內部類都符合一個規則。該規則是Iterator如何獲取集合的取出
對象呢?通過一個對外提供的方法iterator();

建議使用for循環來完成集合元素的迭代。
八。collection集合的兩大子類接口List和Set(List集合存儲的是引用)
1,區別:
List:元素是有序的,元素可以重複,因爲該集合體繫有索引
Set:元素是無序,元素不可以重複。
2,List特有方法:(凡是可以操作角標的方法都是list集合特有的方法。
boolean add(int index,Object obj)在指定的位置插入
boolean addAll(int index ,collection)在指定的位置插入一個集合。
Object get(int index)獲取指定的角標位上的元素。
int indexOf(Object o)返回此對象在集合中的第一次出現的位置。
ListItertor listIterator():返回list集合特有的迭代器。
Object remove(int index):按照角標移除指定的元素。
Object set(int index,object obj)用指定元素替換列表中指定位置的元素。
List subList(int fromIndex,int toIndex)返回列表中指定的fromIndex和toIndex之間的部分視圖
3.list集合的取出方法:
·通過循環使用get(int index)方法
·使用迭代器
4,list集合特有的ListIterator是Iterator的子接口。在迭代時,不可以通過集合對象的方法操作集合中的元素,
因爲會發生ConcurrentModificationException異常所以,在迭代時, 只能用迭代器的方式操作元素,可是Iterator
方法是有限的,只能對元素進行判斷,取出,刪除的操作,如果想要其他的操作如添加,修改等就需要使用其子接口
ListIterator,只能通過List集合中listIterator()方法獲取。
5,listIterator中的一些方法
添加: void add(Object obj)
6.List集合常見的子類對象
ArrayList:底層的數據結構使用的是數組結構 特點:查詢速度快,但是增刪稍慢 jdk1.2  線程是不同步的 默認構造一個初始容量爲10的空列表。超過50%延長
LinkedList:底層使用的鏈表數據結構  特點:增刪很快,查詢速度稍慢
Vector:底層是數組數據結構  jdk1.0(此時collection沒有出現jdk1.2纔出現)線程是同步的, 被ArrayList替代。 默認構造一個初始容量爲10的空列表。超過100%延長
修改:void set(Object obj)
判斷:boolean hasPrevious()從後向前判斷,判斷前邊是否還有元素
獲取:previous():返回列表中前一個元素。
九。Vector
1,方法:
Enumeration elements();返回枚舉類對象。
枚舉就是Vector特有的取出方式。
2,Enumeration中的方法
boolean hasMoreElements();判斷是否還有元素。
Object nextElements(); 取出下一個元素。

注:因爲枚舉的名稱以及方法的名稱都過長,所以被迭代器取代了,

十. LinkedList

1,特有方法:
添加:
void addFirst(object)添加到開頭
void addLast(Object)添加到結尾
獲取:
Object getFirst();獲取元素但不刪除元素
Object getLast();

Object removeFirst():獲取元素並刪除元素。
Object removeLast();

注:當獲取不到這個元素時拋出NoSuchElementException異常
移除
Object removeFirst();
Object removeLast();

2,jdk1.6版本後
獲取此列表中的元素,如果此列表爲空,則返回null

對remove方法的升級:
Object pollFirst():獲取此列表的第一個元素如果此列表爲空,則返回null
Object pollLast():獲取此列表的最後 一個元素如果此列表爲空,則返回null

對getFirst,getLast方法的升級:
Object peek();
Object peekFirst();
Object peekLast();
對addFirst,addLast方法的升級
void push(Object obj) == addFirst(Object obj);
offerFirst(Object ojb);
offerLast(Ojbect obj);

3.數據結構
堆棧:先進後出  如同一個杯子
隊列:先進先出 first in first out fifo  如同一個水管

注:在迭代時循環中next調用一次就要hasNext判斷一次

十一,
List集合在判斷對象是否相同時,使用的是元素(對象)的public boolean equals(Ojbect obj)方法
boolean contain(Object obj)。remove(Object obj)方法的低層調用的都是元素的equals(Object obj)方法


---------------------- ASP.Net+Unity開發.Net培訓、期待與您交流! ---------------------

發佈了48 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章