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; } }
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768Java 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("猫还在。。。"); } } }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
HashSet是Set的一个重要实现类,称为哈希集,HashSet中的元素无序并且不可以重复,HashSet中只允许一个null元素,具有良好的存取和查找性能。
我们必须要重写equals方法来保证无法插入重复的数据。
hashcode是哈希表中一个重要的元素,在数组中我们查找元素都是从头到尾遍历,效率较低,而哈希表中我们把每个元素与hashcode求余,得到的余数相同的元素放在一起,这样加快了查找的效率,而hashcode具体选择多少是我们不关心的,我们用IDE的自动重写hashcode功能就可以了。