使用Set存储Object对象,重写equals和hashCode方法
来源:互联网 发布:linux版apache下载 编辑:程序博客网 时间:2024/05/22 08:01
概念
Set接口继承Collection接口,用来包含一组无序无重复的对象,它的常用实现类有HashSet(内部对象是散列存取,采用哈希技术)、TreeSet(存储的数据是升序的)
下面以HashSet测试Set存储
Studnet.java
public class Student {private String id;private String name;public Student(String id, String name) { super(); this.id = id; this.name = name;}public String getId() { return id;}public String getName() { return name;}@Overridepublic boolean equals(Object obj) { if (this == obj) { System.out.println("true"); return true; } if ((obj == null) || (obj.getClass() != this.getClass())) { System.out.println("false"); return false; } if (id == ((Student) obj).id && name == ((Student) obj).name) { return true; } else { return false; } }@Overridepublic int hashCode() { int flag = 36; int idNum = Integer.parseInt(id); return flag * idNum;}}
HashSetTest.java
import java.util.HashSet;import java.util.Set;public class HashSetTest {public static void main(String[] args) { Student s1=new Student("1","li"); Student s2=new Student("2","ji"); Student s3=new Student("3","ji"); Student s4=new Student("3","ji"); Set<Student> hs=new HashSet<>(); hs.add(s1); hs.add(s2); hs.add(s3); hs.add(s4); for (Student student : hs) { System.out.println(student.getId()+":"+student.getName()); }}}
运行结果:
1:li
2:ji
3:ji
分析
要使用Set存储Object的对象,执行add方法的时候,会先判断equals方法是否与已有的值相等,再判断是否有相同的hash值,若这两个方法结果都为true,则这个对象就认为已经存在,不插入,所以,我们要对equals和hashCode方法进行重写。
2 0
- 使用Set存储Object对象,重写equals和hashCode方法
- 重写object中的hashcode和equals方法
- 重写对象的equals(Object)方法,同时重写Hashcode()方法
- 重写Object.equals()方法和Object.hashCode()方法
- Object-equals重写,hashCode重写-对象相等
- 重写Java Object对象的hashCode和equals方法实现集合元素按内容判重
- 整理 Object 类(为什么重写 equals 和 hashCode 方法)
- 重写hashCode和equals方法
- 重写equals和hashCode方法
- 重写hashCode和equals方法
- 重写hashcode和equals方法
- 重写equals() 和 hashCode()方法
- 重写hashCode()和equals()方法
- 重写equals和hashcode方法
- HashCode和equals方法重写
- 重写equals() 和 hashCode()方法
- 使用HashSet 存储自定义对象,为什么需要重写hashCode()和equals()?
- 重写hashCode()方法和重写equals()方法
- Lync 2013部署
- java多态性
- spss、R语言、Python数据分析系列(5)spss基本统计分析
- C++中被人遗忘的友元函数
- Python学习--23 内建模块及第三方库
- 使用Set存储Object对象,重写equals和hashCode方法
- POJ 3096 Surprising Strings (枚举)
- Fortigate SSL-VPN配置
- 395. Longest Substring with At Least K Repeating Characters
- Linux 常用命令
- <25>python学习笔记——统计序列中元素的出现频度
- sizeof的计算
- 【nginx】nginx实现反向代理
- java抽象类与接口