Java Set集合使用方法介绍(2)——宠物猫信息管理

来源:互联网 发布:数据分析师报考条件 编辑:程序博客网 时间:2024/05/17 02:07
Javapublic 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;    }}

Javaimport 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功能就可以了。