四、 Set集合的特点和应用
- Set集合的特点特点:不可重复、无序
- 应用:Set set = new HashSet<>0;
4.案例: Set集合的简单使用
4.1、需求:
向Set集合中添加五个元素,并遍历打印
4.2、分析:
A. 向集合中添加元素的方法为: add()
B. 遍历集合的方式:选代器
4.3、步骤:
1.创建集合对象:Set set = new HashSet<>();
2.分别创建五个Student对象
3.使用add方法将Student对象添加到集合中
4.使用选代器遍历集合并打印,注意添加顺序和打印顺序是否相同
4.4、创建学生实体类
import java.util.Objects;
public class Student {
private String name;
private Integer age;
public Student() {}
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" + "name='" + name + '\'' + ", age=" + age + '}';
}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public Integer getAge() {return age;}
public void setAge(Integer age) {this.age = age;}
}
4.5、创建测试类
import java.util.HashSet;
import java.util.Set;
public class Text {
public static void main(String[] args) {
//创建集合对象
Set<Student> set = new HashSet<>();
//创建对象
Student student1 = new Student("张三",12);
Student student2 = new Student("李四",26);
Student student3 = new Student("李四",48);
Student student4 = new Student("王五",35);
Student student5 = new Student("张三",12);
Student student6 = new Student("李四",26);
//将集合对象添加到元素对象中
set.add(student1);
set.add(student2);
set.add(student3);
set.add(student4);
set.add(student5);
set.add(student6);
}
}
==直接遍历循环==
//直接遍历集合
System.out.println(set);
==通过迭代器遍历集合==
Iterator it = set.iterator();
//判断迭代器是否有元素
while (it.hasNext()){
//如果有元素,就获取元素
System.out.println(it.next());
}
==通过增强for遍历Set集合==
for (Student student:set){
System.out.println(student);
}
4.6、set集合一些问题
- 遍历集合为什么Set集合没有"去重"?
1.因为Set集合保证元素的唯一性依赖: equals()和hashCode ()两个方法。
2.你没有在Student类中重写这两个方法,默认调用的是0bject类中的这两个方法。
3.而Object类中的equals()方法默认比较的是地址值是否相
解决方案:
在Student实体类中重写equsls()和hashCode()方法.
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return Objects.equals(name, student.name) && Objects.equals(age, student.age);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}