集合——HashSet接口
set接口简述:元素无序 且 不允许有重复元素。Set接口和List接口继承自Collection接口。
向HashSet存入对象时,对象一般会重写hashCode()和equals()方法。
代码演示:
此时存储并输出了两个一样的。因为没有重写hashCold()和equal()方法。
import java.util.HashSet; import java.util.Iterator; public class HashSetDemo { public static void main(String[] args) { //创建HashSet对象 HashSet hs=new HashSet(); //给集合中添加自定义对象. hs.add(new Student("李白",21)); hs.add(new Student("杜甫",19)); hs.add(new Student("张飞",22)); hs.add(new Student("李白",21));//存储了两个“李白” //取出集合中的每个元素 Iterator it=hs.iterator(); while (it.hasNext()){ Student s=(Student)it.next(); System.out.println(s); }
学生类:
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override //重写String方法,利于输出完整的String量。ALT+insert键选择to String
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
//此时从上到这,没有重写hashCold()和equal()方法。所以HashSet集合可以存储一样的元素
此时输出:
Student{name='李白', age=21}
Student{name='张飞', age=22}
Student{name='杜甫', age=19}
Student{name='李白', age=21} //此时存储并输出了两个一样的。元素重复了
///////////////////////////////////////////////////////////////////////////////////////////
@Override //ALT+insert键选择 hashCold()和equal(),直接默认下一步就行了。
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
//此时到这,以经重写hashCold()和equal()方法。
此时输出:
E:\Files\java11\bin\java.exe "-javaagent:E:\Files\Idea\IntelliJ IDEA 2018.2.2\lib\idea_rt.jar=57273:E:\Files\Idea\IntelliJ IDEA 2018.2.2\bin" -Dfile.encoding=UTF-8 -classpath E:\Files\Idea\javacold\out\production\demo01 com.libai.www.HashSetDemo
Student{name='李白', age=21}
Student{name='杜甫', age=19}
Student{name='张飞', age=22} //李白这个元素此时不能重复
Process finished with exit code 0
}
}
null
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!