hashset內部的資料結構是雜湊表。在儲存元素時,要使用hashcode方法確定位置。如果位置相同,再根據元素的equals來確定是否相同。
注:在string中,複寫了equals方法,比較的是字串的內容。
@override
public int hashcode()
@override
public boolean equals(object obj)
以上**是在hashset中自定義person物件,在person物件中,要覆蓋兩種方法。
補充:linkedhashset內部有雙向鍊錶確保有序。
想要輸出map集合中的key和value,一般採用先使用keyset獲取key值,返回的是乙個key的set集合,再通過迭代器get(key)獲取對應的value值。而map.entry可以一次性獲取鍵值對。
hashmaphm = new hashmap();
hm.put(1, "a");
hm.put(2, "aa");
hm.put(3, "aca");
hm.put(4, "bab");
iterator> it = hm.entryset().iterator();
while(it.hasnext())
以上**是在hashmap中通過map.entry獲取鍵值對。
treeset和treemap 具備排序功能
實現tree集合,必須實現比較方法:
1.新建class 實現comparator介面,覆蓋compare方法,並new乙個該類的物件,作為引數傳遞給tree集合。
注:string字串自帶compareto功能,實現兩個字串比較,大於返回正數,小於返回負數,等於返回0.
public class comparebyname implements comparator
}
以上**為在treemap集合中實現自定義物件student(string name, int age),自定義比較函式,實現根據名字(內建compareto)比較字串的大小。當兩個字串相同時,再比較兩個物件的年齡。由於tree集合中字元不能重複,所以當兩個字串比較之後相同時,後乙個將覆蓋前乙個。
treemaptm = new treemap(new comparebyname());
新建treemap物件時,實現該比較函式即可。
2.自定義物件時,實現compareable介面,並覆蓋compareto方法,即讓元素本身具備比較方法。
public class person implements comparable
以上**是在treeset集合實現自定義物件person時,讓person實現comparable介面,並複寫compareto方法,通過比較年齡實現比較。當年齡相同時,再比較字串name,如果age和name都相同,只輸出一次。
treeset ts = new treeset();
ts.add(new person("john",22));
ts.add(new person("zoe",20));
ts.add(new person("allen",19));
ts.add(new person("jack",27));
ts.add(new person("lily",20));
輸出為:
allen…19
lily…20
zoe…20
john…22
jack…27
補充:linkedhashmap可實現有序輸出。
list中元素有序且可重複,可使用set方法修改某個位置上的元素。
而set中元素無序且不能重複,不能使用set方法修改某個位置上的元素。
想要遍歷set中的元素,只能使用iterator和foreach方法,不能使用list的get方法。
java集合筆記
1 儲存物件 陣列和集合 陣列儲存物件的弊端 1.一旦建立,其大小不可變。2 陣列存放的物件個數是不可知的。2 collection介面 子介面 a set 無序性 不可重複的元素 hashset,linkedhashset,treeset b list 有序性 可以重複的元素 arraylist ...
java 集合筆記
常用 arraylist子類,vector子類 區別 arraylist是非同步處理,效能高,但是執行緒不安全。vector是同步處理,效能低,但是執行緒安全 用法都一樣。與list介面區別是不能加入重複的元素。常用 hashset子類,treeset子類 hashset 無順序存放。treeset...
Java集合筆記
collection中的常用功能 arraylist,linkedlist,hashset,treeset boolean add object e 向集合中新增元素 void clear 清空集合中所有元素 boolean contains object o 判斷集合中是否包含某個元素 boole...