1. 程式人生 > 其它 >java HashSet集合

java HashSet集合

技術標籤:# 4.6 JavajavaHashSet

文章目錄

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; } }

在這裡插入圖片描述