set是無序(無下標),不重複的
新增字串:
// 建立乙個hashset
hashsetset = new hashset<>();
// 新增
boolean add = set
.add("d");
boolean add2 = set
.add("d");
set.add("a");
set.add("a");
set.add("b");
set.add("c");
system.out
.println(add);
system.out
.println(add2);
system.out
.println(set);
使用hashset 主要用來 去重
去重:
// 建立乙個hashset 新增6個人
hashsetset = new hashset<>();
set.add(new person("dp", 17));
set.add(new person("dp", 17));
set.add(new person("ygs", 18));
set.add(new person("ygs", 18));
set.add(new person("sxm", 19));
set.add(new person("sxm", 19));
iteratoriterator = set.iterator();
while (iterator.hasnext())
通過重寫物件類的 equals 和 hashcode 去重:
當set集合在進行儲存的時候,hashcode值相同時,會呼叫equals方法進行對比是同乙個物件就不存;當hashcode值不相同時 不用呼叫equals方法,可以直接存
@override
public
inthashcode()
@override
public boolean equals(object obj) else
if (!name.equals(other.name))
return
false;
return
true;
}
linkedhashset 特點:有序 怎麼存就怎麼取出來
新增字串:
linkedhashsetset = new linkedhashset<>();
set.add("l");
set.add("w");
set.add("w");
set.add("a");
set.add("n");
set.add("g");
system.out
.println(set);
輸入乙個字串,去掉其中重複字元
scanner scanner = new scanner(system.in);
string string = scanner.nextline();
linkedhashsetset = new linkedhashset<>();
char chararray = string.tochararray();
for (int i = 0
; i < chararray.length; i++)
system.out
.println(set);
利用set集合 去除arraylist集合中的重複元素(操作原arraylist)
arraylistarraylist = new arraylist<>();
arraylist.add("a");
arraylist.add("a");
arraylist.add("b");
arraylist.add("b");
arraylist.add("c");
arraylist.add("c");
linkedhashsetset = new linkedhashset<>();
// 將list所有元素 扔到set中去重
set.addall(arraylist);
// 清空原arraylist
arraylist.clear();
arraylist.addall(set);
system.out
.println(arraylist);
treeset(內部實現二叉樹)
特點:無序 不重複
主要作用:排序
**示例:
// 建立乙個treeset
treesettreeset = new treeset<>();
treeset.add(1);
treeset.add(13);
treeset.add(1);
treeset.add(3);
treeset.add(2);
for (integer integer : treeset)
treeset 排序,需要實現comparable這個介面,編寫排序規則,系統就會按規則來排序
compareto方法:
返回0時 set中只有乙個元素
返回1時 按存進去的順序 正序列印
返回-1時 按存進去的順序 倒序列印
treeset 按二叉樹儲存的:
要儲存的數比根小 放在我的左邊
要儲存的數比根大 放在我的右邊
要儲存的數與根一樣大 不存
列印 按從小到大輸出 (公升序)
使用treeset排序的步驟:
1.讓treeset集合中儲存的物件 實現comparable介面
2.實現compareto方法
3.在compareto方法中實現你要排序的規則
// 建立treeset集合
treesettreeset = new treeset<>();
treeset.add(new worker("sxm0", 11));
treeset.add(new worker("sxm01", 11));
treeset.add(new worker("sxm5", 12));
treeset.add(new worker("sxm4", 12));
treeset.add(new worker("sxm2", 15));
treeset.add(new worker("sxm3", 14));
for (worker worker : treeset)
// 實現comparable介面
public
class
worker
extends
person
implements
comparable
public worker(string name, int age)
// 實現介面中的唯一方法
// 按年齡比較
@override
public
int compareto(worker o)
// 按姓名比較
@override
public
int compareto(worker o)
// 主要條件 按年齡 次要條件 姓名
@override
public
int compareto(worker o)
return
this.getage() - o.getage();
}// 主要比字串長度 然後比年齡 最後比字串
@override
public
int compareto(worker o)
return
this.getage() - o.getage();
}return
this.getname().length() - o.getname().length();
}}
使用比較器來排序步驟:
1.建立乙個類 實現comparator
2.實現介面中的方法 並編寫 比較的規則
3.把該類的物件 傳入 treeset集合中
比較字串長度:
treesetset = new treeset<>(new stringlengthcompareimpl());
set.add("asd");
set.add("asde");
set.add("asdef");
set.add("a");
set.add("asa");
system.out.println(set);
// 建立乙個比較器類 專門來做字串的長度比較
class
stringlengthcompareimpl
implements
comparator
}保留重複的字串:
treesetset = new treeset<>(new keepstringimpl());
set.add("asd");
set.add("asde");
set.add("asdef");
set.add("a");
set.add("asd");
system.out.println(set);
// 保留重複的字串 比較器
class
keepstringimpl
implements
comparator
}
Java之Set集合的學習
在學習完list集合的三個子實現類後就開始學習set集合。set集合和list集合的區別?set集合 不允許元素重複,唯一的 元素可以為null 不能保證迭代的順序恆久不變 底層雜湊表和hascode 無序 儲存和取出不一致 list集合 允許元素重複,並且儲存特點 有序性 儲存和取出一致 通過se...
JAVA 集合子介面之Set
特點1 無序,儲存的元素與新增順序無關 特點2 不可重複 使用元素的equals方法來判定是否重複 特點3 能儲存null元素,只能儲存一次。hash演算法機制 set集合在新增或檢視元素時,當集合中的元素過多時,就會進行多次的比較,效率變低。為了提高效率,在設計元素型別時,提供hash演算法,用於...
Java學習筆記之Set集合
set集合由jdk1.2開始新增,繼承自collection介面。set集合是乙個不包含重複元素的集合。如果允許重複,請使用list集合 set集合中沒有提供額外的方法,只有以下方法需要特殊說明 boolean add e e 如果集合中不包含指定元素,則新增到集合中,並返回true。否則將保持se...