Java
public class Cat {
private String name;// 名字
private int month;// 年龄
private String species;// 品种
// 构造方法
public Cat(String name, int month, String species) {
super();
this.name = name;
this.month = month;
this.species = species;
}
// getter与setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
@Override
public String toString() {
return "[姓名=" + name + ", 年龄=" + month + ", 品种=" + species + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + month;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((species == null) ? 0 : species.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
//判断对象是否相等,相等返回true,不用继续比较属性了
if(this==obj)
return true;
//判断obj是否是Cat类对象
if(obj.getClass()==Cat.class){
Cat cat = (Cat)obj;
return cat.getName().equals(name)&&(cat.getMonth()==month)&&(cat.species.equals(species));
}
return false;
}
}
Java
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CatTest {
public static void main(String[] args) {
//定义宠物猫对象
Cat huahua = new Cat("花花",12,"英国短毛猫");
Cat fanfan = new Cat("凡凡",3,"中华田园猫");
//将宠物猫对象放入HashSet中
Set<Cat> set = new HashSet<Cat>();
set.add(huahua);
set.add(fanfan);
//显示宠物猫信息
Iterator<Cat> it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//再添加一个与花花属性一样的猫
Cat huahua01 = new Cat("花花",12,"英国短毛猫");
set.add(huahua01);
System.out.println("***************************");
System.out.println("添加重复数据后的宠物猫信息:");
it=set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("***************************");
//重新插入一个新宠物猫
Cat huahua02 = new Cat("花花二代",2,"英国短毛猫");
set.add(huahua02);
System.out.println("添加花花二代后的宠物猫信息:");
it=set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//在集合中查找花花的信息并输出
System.out.println("***************************");
if(set.contains(huahua)){
System.out.println("花花找到了");
System.out.println(huahua);
}
else{
System.out.println("花花没找到");
}
//在集合中使用名字查找花花的信息
System.out.println("***************************");
System.out.println("通过名字查找花花信息");
boolean flag = false;
Cat c=null;
it=set.iterator();
while(it.hasNext()){
c = it.next();
if(c.getName().equals("花花")){
flag=true;//找到了
break;
}
}
if(flag){
System.out.println("花花找到了");
System.out.println(c);
}else{
System.out.println("花花没找到");
}
//删除花花二代的信息并重新输出
for(Cat cat:set){
if("花花二代".equals(cat.getName())){
set.remove(cat);
break;
}
}
System.out.println("*********************************");
System.out.println("删除花花二代后的数据");
for(Cat cat:set){
System.out.println(cat);
}
//删除集合中的所有宠物猫信息
System.out.println("****************");
boolean flag1 =set.removeAll(set);
if(set.isEmpty()){
System.out.println("猫都不见了。。。");
}else{
System.out.println("猫还在。。。");
}
}
}
HashSet是Set的一个重要实现类,称为哈希集,HashSet中的元素无序并且不可以重复,HashSet中只允许一个null元素,具有良好的存取和查找性能。
我们必须要重写equals方法来保证无法插入重复的数据。
hashcode是哈希表中一个重要的元素,在数组中我们查找元素都是从头到尾遍历,效率较低,而哈希表中我们把每个元素与hashcode求余,得到的余数相同的元素放在一起,这样加快了查找的效率,而hashcode具体选择多少是我们不关心的,我们用IDE的自动重写hashcode功能就可以了。