》1.儲存物件可以考慮:陣列、集合
》2.陣列儲存物件的弊端:一旦建立,其長度不可變
》3.集合: 分為 collection 和 map 兩種體系。
①collection 介面:
》set:元素無序、不可重複的集合
》list:元素有序、可重複的集合
②map 介面:具有對映關係「key-value對」 的集合。
collection 介面
-----list介面:儲存有序的,可以重複的元素
---arraylist(主要的實現類)、linkedlist、vector 實現類
-----set介面:儲存無序的,不可重複的元素
---hashset、linkedhashset、treeset 實現類
map 介面 :儲存「鍵值對」的資料
---hashmap、linkedhashmap、treemap、hashtable(子類:properties)實現類
以下不一一介紹,只說兩個,可查api
》1.contains(object obj);
判斷集合中是否包含指定的obj 元素,如果包含,返回true,否則返回false。
注意:判斷的依據 是根據元素所在的類的equals()方法進行判斷的
如果存入集合中的元素是自定義類的物件。要求:自定義類要重寫equals()方法!
》2.集合遍歷方法
iterator():
》返回乙個iterator 介面實現類的物件,用其來實現對集合的遍歷。
》①collection 物件.iterator()方法獲取iterator 物件
②iterator 物件.hasnext()方法配合 iterator物件.next()方法
(1)arraylist 實現類
list 是collection 的子介面,所以collection 中的15個方法他都能用。並在此基礎上,新增了 根據索引 來操作集合元素的方法。如下:
//void add(int index, e element)
在指定的索引位置新增元素 element,index 從0開始。
//void addall(int index, collection c)
//object get(int index)
獲取指定索引的元素。
//object remove(int index)
刪除指定索引位置的元素。
//object set(int index, object el)
設定指定索引位置的元素為 el
//int indexof(object obj)
返回obj 在集合中首次出現的位置,沒有的話,返回-1。
//int lastindexof(object obj)
返回obj 在集合中最後一次出現的位置,沒有的話,返回-1。
//list sublist(int fromindex,int toindex)
返回從fromindex 到 toindex 結束(左閉右開)的乙個子list
list 常用的方法:
增(add(object obj))
刪(remove)
改(set(int index, object obj))
查(get(int index))
插(add(int index, object ele))
長度(size())
(2)linkedlist 類
1.在底層以鍊錶的形式存在,但還是可以通過索引獲取其中的內容。
2.適用於 對於頻繁的插入、刪除操作。
(3)vector類
執行緒安全,但效率要低於arraylist
1.set介面:儲存無序的,不可重複的元素。
---hashset(主要實現類)
---linkedhashset
---treeset 實現類
2.set 中常用的方法都是collection 下定義的。
3.set 儲存的元素是無序的,不可重複的!
》無序性 不代表 隨機性。真正的無序性 指的是元素在底層儲存的位置是無序的。根據hash值來存。
》不可重複性:當向set 中新增進相同的元素的時候,後面的這個不能新增進去。
說明:要求新增進set 中的元素所在的類,一定要重寫equals() 和 hashcode()方法。進而保證set 中元素的不可重複性。
而新增進list 中的元素的所在的類,只需重寫equals()方法即可。
4.set 中的元素如何儲存?使用 雜湊演算法。
當向 set 中新增物件時,首先呼叫此物件所在類的hashcode()方法,計算此物件的雜湊值,此雜湊值決定了此物件在set 中的儲存位置。若此位置沒有物件儲存,則這個物件直接儲存到此位置。若此位置已有物件儲存,再通過equals()比較這兩個物件是否相同。如果相同,後乙個物件就不能再新增進來。萬一返回false呢,都儲存(不建議)。
要求:hashcode()方法要與equals()方法一致。
5.同樣可以用iterator()方法來對其進行遍歷。
linkedhashset
linkedhashset :
1. 使用鍊錶維護了乙個新增進集合中的順序,導致當我們遍歷linkedhashset集合元素時,是按照新增進去的順序遍歷的。
2.但這個linkedhashset在記憶體中存的還是無序的。
3.linkedhashset 插入效能略低於 hashset,但在 迭代訪問set 裡的全部元素 時有很好的效能。
treeset
1.向treeset 中新增的元素必須是同乙個類的。
2.可以按照新增進集合中的元素的指定的順序遍歷。像string。。。包裝類等預設按照從小到大的順序遍歷。
3.當向treeset 中新增自定義類的物件時,有兩種排序方式:①自然排序 ②定製排序
4.自然排序:當自定義類 沒有實現comparable 介面時,當向treeset 新增自定義類物件,會報錯classcastexception。這個comparable 介面中的方法compareto()方法是確定按照哪個屬性排列。
5.向treeset 中新增元素時,首先按照compareto ()方法進行比較,一旦返回0,雖然僅是兩個物件的此屬性值相同,但是程式會認為這兩個物件是相通的,進而後乙個物件不能新增進來。
要求:compareto() 與hashcode() 以及equals()方法保持一致。
重寫的compareto()方法
6.定製排序:
1)建立乙個實現comparator 介面的類物件
//向treeset 中新增自定義類的物件,在此compare()方法中,指明是按照自定義類的哪個屬性排序的。
2)將此物件作為形參傳遞給treeset 的構造器中。
3)向treeset 中新增comparator 介面中的compare 方法中涉及的類的物件。
要求:compare()方法與hashcode() 以及equals()方法保持一致。
JAVASE基礎(十一)
內部類 在乙個類的內部定義另外乙個類,那麼另外乙個類則稱作為內部類 內部類的class檔名 外部類 內部類.class 成員內部類 成員內部類的訪問方式 方式一 在外部類提供乙個方法建立內部類的物件進行訪問。方式二 在其他類中直接建立內部的物件進行訪問。格式 外部類.內部類 變數名 new 外部類 ...
javaSE 集合與佇列(list)
1.list arraylist 代表長度可以改變得陣列。可以對元素進行隨機的訪問,向 arraylist 中插入與刪除元素的速度慢。linkedlist 在實現中採用鍊錶資料結構。插入和刪除速度快,訪問速度慢。vector jdk1.5之後就使用arraylist替換了。arraylist內部有個...
java基礎 集合1
1 陣列和集合的區別,陣列存放同一型別的物件,集合可以存放不同型別的物件 陣列長度一定,集合長度不一定 2 資料在記憶體中的儲存結構稱為資料結構 3 集合和陣列存放的都是物件的位址 4 list有序 可以重複的 凡是可以操作角標的方法都是特有方法,增刪改查 增 add addall 刪 remove...