zoukankan      html  css  js  c++  java
  • set集合可以添加重复元素

    set集合判断元素的唯一性要重写hashcode和equals方法,这样就能保证不会加入重复的元素,

    但是在以下这种情况下任然可以加入重复元素,即使他们的hashcode和equals方法结果相同

    public static void main(String[] args) {
            Set<Person> set = new HashSet<Person>();
            Person p1 = new Person("p1",123);
            Person p2 = new Person("p2",123);
            Person p3 = new Person("p3",123);
            
            set.add(p1);
            set.add(p2);
            set.add(p3);
            
            Iterator<Person> it=  set.iterator();
            while(it.hasNext()){
                Person p = it.next();
                System.out.println(p.getName()+":"+p.getAge());
            }
            
            p3.setAge(20);
            set.remove(p3);
            set.add(p3);
            System.out.println("---------------------");
            it=  set.iterator();
            while(it.hasNext()){
                Person p = it.next();
                System.out.println(p.getName()+":"+p.getAge()+":"+p.hashCode());
            }
            
        }
    class Person{
        private String name;
        private int age;
        public Person(){
            
        }
        
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
        /**
         * 返回  
         * @return 
         */
        public String getName() {
            return name;
        }
        /**
         * 设置  
         * @param 
         */
        public void setName(String name) {
            this.name = name;
        }
        /**
         * 返回  
         * @return 
         */
        public int getAge() {
            return age;
        }
        /**
         * 设置  
         * @param 
         */
        public void setAge(int age) {
            this.age = age;
        }
        
        @Override
        public int hashCode() {
            return this.age;
        }
        
        @Override
        public boolean equals(Object obj) {
            if(obj instanceof Person){
                Person p = (Person) obj;
                return p.getName().equals(this.getName());
            }
            return false;
        }
        
    }

    在修改set中元素属性值(hashcode值)在去删除这个元素时就删除不掉 因为它会根据修改之后的hashcode值去查找次对象,显然查找不到 删除失败,

    在重新添加 此对象时  任然可以加入,虽然他们的hashcode和equals相同 但是他们存储在不同的位置

  • 相关阅读:
    定义和使用EL函数
    在Java Web程序中使用Hibernate
    JDBC在Java Web中的应用——分页查询
    JDBC调用存储过程
    使用navicat工具创建MySQL存储过程
    JDBC操作数据库的批处理
    JDBC操作数据库
    Servlet监听器统计在线人数
    Servlet字符编码过滤器
    Servlet过滤器创建与配置
  • 原文地址:https://www.cnblogs.com/Wen-yu-jing/p/4299702.html
Copyright © 2011-2022 走看看