1. 程式人生 > >Java基礎(七)集合框架、迭代器

Java基礎(七)集合框架、迭代器

資料多了用物件存,物件多了用集合存。集合就是儲存物件最常用的一種方式。

集合長度可變,陣列長度不可變,陣列只能存同一種物件。

集合框架頂層就是Collection(介面)。

每一個容器對資料的儲存方式都有不同。

資料在記憶體中的構成情況(儲存方式)成為資料結構。

size()返回此collection中所有元素的個數。

集合當中不可能存物件實體。集合和數組裡面儲存的都是物件的引用(地址)。

array1.retainAll(array2);//取交集,array1中只會保留和array2中相同的元素。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

迭代器就是集合取出元素的方式。

迭代器是為了取出並操作元素。

Iterator it = array.iterator();//集合的物件呼叫iterator()方法,返回一個iterator介面(的子類物件(介面型引用只能指向j自己的              子類物件,這個物件(it)不是new出來的,是通過集合(array)中的方法(iterator())獲取出來的。))。

對於取出這個動作,不足以用一個函式來描述(判斷、取出),需要用多個功能來體現,把多個功能封裝到一個物件裡。

iterator是內部類的應用。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

List:元素是有序(怎麼存進去怎麼取出來)的,元素可以重複。因為該集合體繫有索引。

Set:元素是無序(存入和取出的順序不一定一致)的,元素不能重複。

List特有方法:凡是可以操作角標的方法都是該體系的特有方法。

array.get(1)通過角標獲取元素。直接獲取角標代表的值。

不能對同一組元素進行多種同時操作(不能既用集合又用迭代器去操作同一組元素),可能會引發併發修改異常。

ListIterator是List集合特有的迭代器,是Iterator的子介面。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ArrayList:底層資料結構使用的是陣列資料結構。查詢速度很快,增刪查稍慢。執行緒不同步。

LinkedList :底層資料結構使用的是連結串列資料結構。查詢很慢,增刪速度很快。

Vector:底層是陣列資料結構。執行緒同步。被ArrayList替代。

容器的增、刪、查被多執行緒操作容易出現問題

列舉就是Vector特有的取出方式。

取出方式:迭代器、遍歷(for迴圈)、get方法、按角標索引、列舉(Vector特有)。

LinkedList:getFirst()獲取元素,但不刪除元素。removeFirst()獲取元素,但是元素會被刪除。

堆疊資料結構:先進後出。如同一個杯子。

佇列資料結構:先進先出。如同一個水管。

在迭代時迴圈中next呼叫一次,就要hasNext判斷一次。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Set:元素是無序(存入和取出的順序不一定一致)的,元素不能重複。

set集合的功能和Collection是一致的,沒有特有。

HashSet:底層資料結構是雜湊表資料結構。執行緒是非同步的。

在記憶體當中如果雜湊值一樣,再比較是不是同一個物件。

HashSet是通過元素的兩個方法,hashCode和equals來保證元素的唯一性(如果元素的HashCode值相同,才會判斷equals是否               為true,如果元素的hashCode值不同,不會呼叫equals。)。

描述事物需要往集合裡儲存的時候,這樣的物件一般都會覆寫HashCode和equals方法。

對於判斷元素是否存在,以及刪除等操作,依賴的方法是元素的hashCode和equals方法。

ArrayList判斷元素是否存在還有刪除元素,只依賴equals。 

資料結構不同,判斷和刪除依賴的方法也不一樣。

TreeSet:可以對Set集合中的元素進行排序。底層資料結構是二叉樹。

保證元素唯一性的依據是CompareTo方法return 0;

TreeSet集合刪除或者判斷元素是否包含用的都是CompareTo。

TreeSet的第一種排序方式:讓元素自身具備比較性。元素需要實現Comparable介面,覆蓋compareTo方法。

TreeSet的第二種排序方式:當元素自身不具備比較性時或者具備的比較性不是所需要的,這時需要讓集合自身具備比較性。

            在集合初始化時就有了比較方式。

Comparable此介面強行對實現他的每一個類的物件進行整體排序,這種排序被稱為類的自然排序。強制讓物件具備比較性。

TreeSet集合儲存物件,是要排序,所以往TreeSet裡存的物件必須要具備比較性。

排序時,當主要條件相同時,一定判斷一下次要條件。

二叉樹又叫紅黑樹。

二叉樹元素多了以後會自動取折中值。

二叉樹取值是從小到大取。

字串本身具備比較性(comparable)。