import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
//使用HashSet存儲字符串并遍歷
/*Set集合的特點:
無序存放(存儲和讀取的順序有可能不一樣)
沒有索引和list不同
不允許元素重復(元素是惟一的)*/
public class HashSetDemo {
public static void main(String[] args) {
//創建集合對象
//HashSet<String> hs = new HashSet<String>();
Set<String> set = new HashSet<String>();//父類接口引用指向子類對象,因為接口不能實例化所以后面必須跟new? HashSet
//不過需要注意的是,如果使用父類的引用去指向子類的對象,那就沒辦法去使用子類成員的方法。
//添加集合元素
set.add("Hello");
set.add("World");
//集合轉成數組,然后遍歷集合對象
/*Object[] obj = set.toArray();
for(int x=0;x<obj.length;x++){
System.out.println(obj[x]);
}*/
//迭代器遍歷集合
/*Iterator<String>? it = set.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}*/
//增強for遍歷
for(String s:set){
System.out.println(s);
}
}
}
2.使用HashSet存儲自定義對象并遍歷:
package set_day01;
//使用HashSet存儲自定義對象并遍歷
//存儲的自定義對象無法去重,所以下面重寫了equals方法和HashCode方法
/*HashSet的add()方法不能去重的原因:
* 1.通過查找源碼發現,HashSet的add方法,首先會使用當前集合的每一個元素
* 和新添加的元素進行hash值(也可以說是地址值的比較),如果hash值不一樣,則直接添加新的元素。
* 2.如果hash值一樣,則進行比較地址值或者使用equals方法進行其他東西的比較,
* 所有東西的比較結果都不一樣,則添加元素。
* 實現HashSet存儲自定義對象并去重的步驟
* 第一步:重寫hashCode方法,默認返回相等,先比較hash值,如果相等
* 則進行第二步,執行equals方法
* 第二步:重些equals方法,默認返回true,即說明兩個元素是相等的
* 不予以添加。
*
*/
import java.util.HashSet;
public class HashSetDemo2 {
public static void main(String[] args) {
//創建集合對象
HashSet<Student> hs = new HashSet<Student>();
//創建元素對象
Student s = new Student("liqianqian",18);
Student s2 = new Student("fanhaolan",18);
Student s3 = new Student("fanhaolan",18);
//添加元素對象
hs.add(s);
hs.add(s2);
hs.add(s3);
//遍歷集合對象,使用增強for
for (Student student : hs) {
System.out.println(student);
}
}
}
class Student{
String name;
int? age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object obj) {
Student s = (Student) obj;//向下轉型,可以獲取子類特有成員
//比較年齡是否相等,如果不相等,返回false
if(this.age !=s.age){
return false;
}
//比較姓名是否相等,如果相等返回false
if(!(this.name).equals(s.name)){
return false;
}
//默認返回true,說明兩個學生時相等的
return true;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return 1;
}
}