java HashSet集合
阿新 • • 發佈:2021-01-19
文章目錄
1. HashSet介面特點
- 存入集合的順序和取出集合的順序不一致
- 沒有索引
- 存入集合的元素沒有重複
import java.util.HashSet;
public class HashSetDemo {
public static void main(String[] args) {
//建立集合物件
//Set set = new HashSet();
HashSet<String> set = new HashSet<String> ();
//新增元素
set.add("hello");
set.add("world");
System.out.println(set.add("java"));
System.out.println(set.add("java"));
//遍歷集合物件
for(String s : set) {
System.out.println(s);
}
}
}
2. HashSet 儲存自定義物件
HashSet唯一性原理:
- 新新增到HashSet集合的元素都會與集合中已有的元素一一比較
- 首先比較雜湊值(每個元素都會呼叫hashCode()產生一個雜湊值)
- 如果新新增的元素與集合中已有的元素的雜湊值都不同,新新增的元素存入集合
- 如果新新增的元素與集合中已有的某個元素雜湊值相同,此時還需要呼叫equals(Object obj)比較
- 如果equals(Object obj)方法返回true,說明新新增的元素與集合中已有的某個元素的屬性值相同,那麼新新增的元素不存入集合
- 如果equals(Object obj)方法返回false, 說明新新增的元素與集合中已有的元素的屬性值都不同, 那麼新新增的元素存入集合
import java.util.HashSet;
public class HashSetDemo2 {
public static void main(String[] args) {
//建立集合物件
HashSet<Student> hs = new HashSet<Student>();
//建立元素物件
Student s = new Student("zhangsan",18);
Student s2 = new Student("lisi",19);
Student s3 = new Student("lisi",19);
//新增元素物件
hs.add(s);
hs.add(s2);
hs.add(s3);
//遍歷集合物件
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) {
//System.out.println("-------------------");
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() {
return 1;
}
}