java HashSet集合
程序员文章站
2024-01-18 19:19:22
...
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;
}
}
上一篇: java 实现 斐波那契列数