用HashSet存储自定义对象
程序员文章站
2024-02-27 23:12:39
...
#日常练习
关于HashSet的小练习
HashSet不会存入重复元素;
原理:HashSet存储元素前会取到元素的哈希值,哈希值不同时直接存储,
哈希值相同时再调用equals方法判断元素是否已经存在;
存储自定义元素时可以复写HashCode方法来定义元素相同的条件
package Collection;
import java.util.*;
public class HashSetTest {
//HashSet不会存入重复元素;
//原理:HashSet存储元素前会取到元素的哈希值,哈希值不同时直接存储,
//哈希值相同时再调用equals方法判断元素是否已经存在;
//存储自定义元素时可以复写HashCode方法来定义元素相同的条件
public static void main(String[] args) {
HashSet<Administrator> hs = new HashSet<Administrator>();
hs.add(new Administrator(123,"person1"));
hs.add(new Administrator(456,"person4"));
hs.add(new Administrator(789,"person3"));
hs.add(new Administrator(789,"person3"));
hs.add(new Administrator(246,"person2"));
hs.add(new Administrator(246,"person3"));
for(Iterator<Administrator> it = hs.iterator();it.hasNext();) {
Administrator adm = it.next();
System.out.println(adm.getCount()+"-->"+adm.getName());
}
}
}
被调用类
package Collection;
//将自定义类存入TreeSet中时,自定义类必须实现Comparable接口
class Administrator implements Comparable<Administrator>{
private int count;
private String name;
Administrator(int count,String name){
this.count = count;
this.name = name;
}
//复写Object类中compareTo方法,定义自己的比较方法。
public int compareTo(Administrator adm) {
if(!(adm instanceof Administrator)) {
throw new RuntimeException("传入的类类型错误!");
}
if(this.getCount() > adm.getCount()) {
return 1;
}
if(this.getCount() == adm.getCount()) {
this.getName().compareTo(adm.getName());
return 0;
}
return -1;
}
public int hashCode() {
return this.count+this.name.hashCode();
}
public boolean equals(Object obj) {
if(!(obj instanceof Administrator)) {
throw new RuntimeException("传入的类类型错误!");
}
Administrator adm = (Administrator)obj;
//按照账号和姓名都相同时判断为相同对象;
return(this.count == adm.count && this.name.equals(adm.name)) ;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2017/1/17更新:学习了泛型,完善一下代码,功能没变。
推荐阅读
-
自定义类型对象存入HashSet集合的过程
-
用HashSet存储自定义对象
-
浅析HashSet add() 方法存储自定义类型对象的过程
-
HashSet存储自定义对象
-
用pickle存储Python的原生对象方法
-
jQuery asp.net 用json格式返回自定义对象_jquery
-
在ASP.NET 2.0中操作数据之七十四:用Managed Code创建存储过程和用户自定义函数(下部分)
-
在ASP.NET 2.0中操作数据之七十三:用Managed Code创建存储过程和用户自定义函数(上部分)
-
在ASP.NET 2.0中操作数据之七十三:用Managed Code创建存储过程和用户自定义函数(上部分)
-
HashSet和LinkedHashSet存储自定义类型元素