java集合(一):List、Iterator、Array、ArrayList、LinkList

來源:互聯網
上載者:User

標籤:增加   看到了   inf   tail   iterable   detail   tor   rabl   odi   

畢業這麼久,java 標準庫中的集合都沒怎麼仔細瞭解過,準備好好學習學習。

集合(Collection):由一個多個確定的元素所構成的整體叫做 集合--百度百科的解釋。換言之,就是裝元素的容器元素可以是任何類型。

在我們的日常開發,這類工具是必不可少的,所以,好好瞭解他們的特性,能讓我們寫出更合適的代碼,也是在修鍊內功。

------------------------------------------------------------------------------------------

在 Java 中的集合,我覺得可以分類兩類:有序集合List : 元素按照一定順序排列) 和 無序集合Set : 元素是無序的,此特性也決定了元素是不可重複的)。

對於集合,有一個不可缺少的協助工具輔助,那就是迭代器(Iterator),為什麼這麼說呢?我們看看 java 中的代

Collection 介面

從上邊代碼中可以,在 Collection 介面中, 有一個 Iterator<E> iterator() 方法,這個方法返回:一個實現了 Iterator 介面的對象。利用這個迭代器對象可以依次訪問集合中的對象。

Iterator 介面:

 

想必大多數人都使用 迭代器 遍曆集合,有了上邊的 hasNext() 和 remove() 方法,就可以做到,如下:

List<String> list = new ArrayList<String>();Iterator iter = list.iterator();while( iter.hasNext() ){//如何還有元素    String element = iter.next();//擷取元素    //do something with element}

但是,有人看到了上邊的代碼,可能會覺得有點繁瑣,那麼 java 提供一種更加簡介的方式:for each 迴圈。

for ( String element : list ){  //do something with element;  }

簡潔換來的代價就是,該集合必須是實現了 Iterable 介面,這個介面的定義如下:

forEach 方法和 spliterator 方法:都是default方法(java8 之後就開始允許這種騷操作,提供預設實現,不強制實現。參考:http://blog.csdn.net/lin6286878/article/details/53464804),所以,實現 Iterable 介面時,只需要實現 iterator方法即可。

那麼在 java 中,Collection 介面都擴充了 Iterable 介面,那麼,就代表 集合對象都可以使用 for each 達到遍曆的目的

----------------------------------------------------------------------------------------------------

知道了 集合 和 迭代器的 關係之後,ArrayList對象具有 數組的特性,那麼操作起來跟數組差不多;不必多說,我們說說  LinkList 對象。

LinkList 對象中的 add 方法,每次都是在鏈表的尾部添加元素,如果我想要在 ListList 對象某個特定位置插入元素呢?放心,java 為我們提供了 ListIterator 介面,在 Iterator 介面基礎上增加了 add 方法,保證了在鏈表可以在任何位置插入元素。迭代器中的指標是指向兩個元素之間,那麼插入元素的位置位 集合元素個數 + 1。

既然迭代器這麼方便,那麼能不能多個迭代器 同時作用於 同一個集合,答案是:可以的,但是有且只有一個迭代器能對集合進行改變(其他只能讀)。

如果多個迭代器可以改變,那麼集合的資料就會變得很亂,那麼如何保證有且只有一個迭代器對集合進行修改呢?

1)每個迭代器維護一個 該寫操作的計數器,

2)集合本身維護一個 改寫操作的計數器,

3)每個迭代器開始處檢查 兩個計數器的值 是否一致,如果一致,則通過,否則 拋出 ModificationException 異常。

java集合(一):List、Iterator、Array、ArrayList、LinkList

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.