集合總結1


集合類

       集合就是一個只能用以存儲對象的容器

特點:

1, 只能存儲對象

2, 長度可變的容器

 

集合和數組的區別:

1, 集合長度可變,數組長度不可變

2, 數組可以用於存儲基本數據類型和對象,集合只能存儲對象。

 

集合有多種體現,是因爲每一個容器的內部數據結構不同(存儲數據的方式)導致的。

 

Collection:

       集合的最頂層容器。

增刪改查

 

1, 添加

boolean add(Object):添加一個元素

boolean addAll(Collection):添加一個指定容器中的所有元素

 

2, 刪除

void clear() :清空容器

boolean remove(Object) :刪除指定元素

booleanremoveAll(Collection):刪除與指定容器中相等的元素

 

3, 判斷

boolean IsEmpty():判斷容器是否爲空。

boolean contains(Object):是否包含指定元素

booleancontainsAll(Collection):是否包含指定容器中的所有內容

 

4, 獲取

Int size():獲取容器中元素的個數。

Iteratoriterator():得到一個迭代器

booleanretainAll(Collection):保留交集

 

5, 將集合變成數組

Object[] toArray():返回容器中所有元素的數組

 

只有List可以對元素進行增刪改查。

 

集合細節:

1, 創建容器其實就是在堆內存中定義了一個可以存儲對象的對象

集合中存儲的是對象的地址值(引用)

2, add方法什麼類型都可以接收。

原因:因爲add方法的參數類型是Object,所有的元素在存儲時都被自動提升

         爲了Object類。取出對象時,取出類型是Object。

3,對於remove contains方法。

其實內部都是用到了一個對對象進行判斷相等的方法equals。

4,coll.add(4):可以不可以?

在jdk1.4 版本,不可以,必須寫成coll.add(new Integer(4));

在jdk1.5版本,可以,因爲有自動裝箱。

 

Collection:

       |--List:有序(存入的順序和取出的順序一致),元素都有索引,元素可以重複。

       |--Set:元素不可以重複,無序(存入的順序和取出的順序不一定一致)。

 

 

 

瞭解一下List子接口的常見特有方法:

因爲List集合是由索引的,所以它的特有的方法都是圍繞索引定義的。

 

1,添加

       add(index,element):在指定位置插入元素。

       addAll(index,colletion):在指定位置插入一堆元素。

      

2,獲取

       Objectget(index):根據索引獲取元素。

       intindexOf(object):獲取指定元素的索引。

       intlastIndexOf(Object)

       ListsubList(startIndex,endIndex);

3,刪除

       remove(index):根據索引刪除元素。

      

4,修改

       set(index,element):修改指定位置上的元素,用指定的元素進行替換。

        

這就是傳說中的增刪改查(c-create,u-update,r-read,d-delete).

記住:只有list可以對元素進行增刪改查。

 

List:常見的子類對象。

       |--Vector:內部是數組數據結構。

                            而且是一個可變長度的數組(無非就是新建數組並將原數組元素複製到新數組中)

                            jdk1.0版本就存在了,jdk1.2版本才加入了java集合框架中。

                            是同步。因爲效率很低,所以很少用。

                            該集合支持枚舉接口Enumeration,但是被Iterator替代。

                           

                           

       |--ArrayList:內部也是數組數據結構,是不同步的。替代了Vector.查詢元素的速度很快。  

                           

       |--LinkedList:內部是鏈表數據結構,是不同步的。該數據結構的特點:對元素的增刪速度很快。

      

 

LinkedList:

       addFirst();

       addLast();

       jdk1.6時,

       offerFirst()

       offerLast();

      

      

       獲取元素,但不刪除。集合長度不改變。如果集合中沒有元素會出現NoSuchElementException

       getFirst():

       getLast();

       jdk1.6時,獲取元素,但不刪除。集合長度不改變。如果集合中沒有元素會返回null。

       peekFirst()

       peekLast();

      

      

       獲取元素,但是會將該元素刪除,集合長度改變。如果集合中沒有元素會出現NoSuchElementException

       removeLast();

       removeFirst();

       jdk1.6時,獲取元素,但是會將該元素刪除,集合長度改變。如果集合中沒有元素會返回null。

       pollFirst()

       pollLast();

 

 

介紹兩個常見的簡單數據結構:

堆棧:先進後出。firstin  last out  FILO

 

隊列:先進先出。firstin first out  FIFO

面試:請使用LinkedList模擬一個堆棧或者隊列。

 

 

 

對於ArrayList判斷元素是否相同,依據的是元素的equals方法。

對於contains,或者remove內部都是使用equals來判斷是否有相同的元素。

所以存儲自定義元素時,必須覆蓋equals方法,建立自定義元素的比較相同的方式,通常都依據自定義元素的屬性。

 

迭代器:

       是一種取出元素的方式。

迭代器的基本使用:

Iterator接口:

iterator():返回一個Iterator接口類型的對象。

 

NoSuchElementException(常見的異常)

 

hasNext():對於迭代器取出元素,先要進行判斷是否有元素,有就取。

如果元素很多,會判斷多次並取出多次。

 

while和for循環的比較:

       for好些:迭代器變量在元素取完以後就釋放了。

 

循環中不要寫多個next()方法

 

迭代器的基本原理:

數據結構不同,取出元素方式不同。

爲了方便於對每一個容器進行取出的操作,對容器進行共性的抽取。

每一個去出方式都包含:

 

hasNext()

{

       code

}

next()

{

}

 

 

好處:降低了數據結構的耦合性。

 

 

 

List集合取出元素有兩種方式:1,迭代;2,遍歷

 

listIterator:列表迭代器

 

ConcurrentModification:併發修改,不允許時發生的異常。

 

在迭代中操作集合中的元素:引用迭代器中的方法。

 

 

Iterator中的方法較少,只能判斷、獲取、刪除

 

List中的listIterator方法,具備更多的操作。可以增刪改查。因爲list集合具備索引的屬性。

       侷限性:只能用在List派系中。

該方法返回ListIterator列表迭代器。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章