黑马程序员技术交流社区

标题: 关于内存的问题 [打印本页]

作者: 漩涡java    时间: 2014-2-20 19:04
标题: 关于内存的问题
//定义一个Person类 覆盖hashCode()和equals方法class Person{        private String name;        private int age;        public int hashCode() {                final int prime = 31;                int result = 1;                result = prime * result + age;                result = prime * result + ((name == null) ? 0 : name.hashCode());                return result;        }                public boolean equals(Object obj) {                if (this == obj)                        return true;                if (obj == null)                        return false;                if (getClass() != obj.getClass())                        return false;                Person other = (Person) obj;                if (age != other.age)                        return false;                if (name == null) {                        if (other.name != null)                                return false;                } else if (!name.equals(other.name))                        return false;                return true;        }        public Person(String name, int age) {                this.name = name;                this.age = age;        }        public String getName() {                return name;        }        public void setName(String name) {                this.name = name;        }        public int getAge() {                return age;        }        public void setAge(int age) {                this.age = age;        }}

//定义一个HashCode集合的类
public class HashCodeTest {

                public static void main(String[] args) {
                Collection <Person> hs=new HashSet<Person>();
                Person p1=new Person("1", 10);
                Person p2=new Person("2", 12);
                Person p3=new Person("3", 13);
                Person p4=new Person("1", 10);
                System.out.println("修改前"+p1.hashCode());
                hs.add(p1);
                hs.add(p2);
                hs.add(p3);
                hs.add(p4);
                //添加后改动对象属性(涉及到产生HashCode值的属性),导致删除不成功。
                p1.setName("a");
                System.out.println("修改后"+p1.hashCode());
                hs.remove(p1);//删除也是根据元素HashCode的值来查找和移除。
                System.out.println(Arrays.asList(hs)+"  "+hs.size());//打印出来的集合还是三个元素,删除失败。
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2