public class Personnel {
private String name;
private int age;
public Personnel() {
}
public Personnel(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return this.getName()+":"+this.getAge();
}
//覆寫hashCode算法
public int hashCode() {
return name.hashCode()+age*77;
}
//覆寫equals算法
public boolean equals(Object obj) {
if(this == obj) return true;
Personnel p = (Personnel)obj;
return p.getName().equals(name) && age == p.getAge();
}
}
/**
* hashCode算法中用的是Object對象equals方法,所以要覆寫equals方法
*/
HashSet類:
/**
* Set集合和Collection 接口中方法是一樣
* Set:
* |--HashSet 哈希表(實際上是一個 HashMap 實例)支持。它不保證 set 的迭代順序;
* 特別是它不保證該順序恆久不變。此類允許使用 null 元素。
* |--TreeSet 使用元素的自然順序對元素進行排序,或者根據創建 set 時提供的 Comparator 進行排序,具體取決於使用的構造方法。
*
*/
public class SetDemo {
public static void main(String[] args) {
HashSet<String> hs = new HashSet<>();
HashSet<Personnel> hp = new HashSet<>();
fonctions(hs);
System.out.println();
fonctionp(hp);
}
private static void fonctions(HashSet<String> hs) {
//添加數據
hs.add("方明");
hs.add("張鵬");
hs.add("小芳");
hs.add("阿莉");
System.out.println("打印對象數據源:"+hs);
//包含元素
System.out.println("是否包含小芳:"+hs.contains("小芳"));
//不包含任何元素
System.out.println("是否爲空集合:"+hs.isEmpty());
//刪除指定元素
System.out.println("是刪除小芳:"+hs.remove("小芳"));
System.out.println("打印對象操作後數據源:"+hs);
//迭代器和Collection 是相同的
}
private static void fonctionp(HashSet<Personnel> hp) {
//添加對象
Personnel p = new Personnel("xiaofang",18);
Personnel pr = new Personnel("zhangsan",10);
hp.add(new Personnel("lisi",20));
//添加兩次
hp.add(new Personnel("lisi",20));
hp.add(new Personnel("wangwu",30));
hp.add(p);
hp.add(pr);
System.out.println("打印對象數據源:"+hp);
//包含元素
System.out.println("是否包含對象p:"+hp.contains(p));
//不包含任何元素
System.out.println("是否爲空集合:"+hp.isEmpty());
//刪除指定元素
System.out.println("是刪除pr:"+hp.remove(pr));
System.out.println("打印對象操作後數據源:"+hp);
}
}
/**
* 注意:
* 1.HashSet集合是基於哈希表結構。
* 2.HashSet存儲方式是通過哈希算法存儲。
* 3.如果需要按照指定內容排序和唯一性,需要複寫hashCode()和equals()方法
*/
運行結果:打印對象數據源:[張鵬, 阿莉, 方明, 小芳]
是否包含小芳:true
是否爲空集合:false
是刪除小芳:true
打印對象操作後數據源:[張鵬, 阿莉, 方明]
打印對象數據源:[xiaofang:18, lisi:20, zhangsan:10, wangwu:30]
是否包含對象p:true
是否爲空集合:false
是刪除pr:true
打印對象操作後數據源:[xiaofang:18, lisi:20, wangwu:30]
Api參考:
方法摘要 | |
---|---|
boolean | add(E e) 如果此 set 中尚未包含指定元素,則添加指定元素。 |
void | clear() 從此 set 中移除所有元素。 |
Object | clone() 返回此 HashSet 實例的淺表副本:並沒有複製這些元素本身。 |
boolean | contains(Object o) 如果此 set 包含指定元素,則返回 true。 |
boolean | isEmpty() 如果此 set 不包含任何元素,則返回 true。 |
Iterator<E> | iterator() 返回對此 set 中元素進行迭代的迭代器。 |
boolean | remove(Object o) 如果指定元素存在於此 set 中,則將其移除。 |
int | size() 返回此 set 中的元素的數量(set 的容量)。 |