Set的特点:不包含重复元素
HashSet如何保证元素唯一性的:通过重写hashcode();与equals();方法
HashSet底层数据结构:哈希表,数组+链表(JDK1.8之后引入红黑树,即底层数据结构为数组+链表+红黑树:当链长达到8之后,转为红黑树存储)
-------------------------------------------------------------------------------------------
例1:创建一个HashSet存入数据并遍历集合:
public static void main(String[] args) {
//新建一个HashSet集合,泛型为String类型
HashSet<String> hs = new HashSet<>();
//向集合中添加元素
hs.add("a");
hs.add("b");
hs.add("c");
hs.add("d");
hs.add("e");
hs.add("f");
//利用for循环遍历集合
for (String h : hs) {
System.out.println(h);
}
}
输出:
a
b
c
d
e
f
例2:存储自定义对象到Hash集合中
——新建Student类
public class Student {
//创建私有的name与age
private String name;
private int age;
//提供空参构造、有参构造
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// 提供set/get方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写toString方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
——新建主类Test
public class Test {
public static void main(String[] args) {
//新建HashSet集合,传入Student类型
HashSet<Student> set = new HashSet<>();
//向集合中添加元素
set.add(new Student("张三",20));
set.add(new Student("李四", 29));
set.add(new Student("王五", 80));
set.add(new Student("赵六", 26));
//遍历集合
for (Student student : set) {
System.out.println(student);
}
}
}
输出:
Student{name='李四', age=29}
Student{name='赵六', age=26}
Student{name='张三', age=20}
Student{name='王五', age=80}