面试题分析:6 关于HashSet的add方法的解析

来源:互联网 发布:邮票交易源码 编辑:程序博客网 时间:2024/06/05 04:14
package com.luzhiming.setDemo; import java.util.ArrayList;import java.util.HashSet;/**  * @author strungle  E-mail: 645707787@QQ.com * @version 创建时间:2013-6-12 下午8:29:14  *  */public class HashSetDemo {public static void main(String[] args) {HashSet<Person> myset = new HashSet<Person>();//打印结果:trueSystem.out.println(myset.add(new Person(1,"张三")));//打印结果:false , 表示这个对象没有添加到集合中/** * add方法: * 当我们向HashSet中添加对象的时候: * 首先调用 hashCode方法,如果hashcode不相同则将对象放入,如果相同 * 然后调用equasl,如果equasl返回false,则将对象放入 * 如果equasl方法返回true,表示集合中确实存在了该对象,此时,放弃放入该对象,并且返回false *  */System.out.println(myset.add(new Person(1,"张三")));System.out.println(myset.size());}}class Person{private int age;private String name;public Person(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic 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;}}

所以一般情况下,我们 hashCode()和equasl()方法是同时重写的。

原创粉丝点击