打印结果是不是3那就要看你Person类里有没有复写hasCode()和equals()这两个方法了。
在没有复写这两个方法的时候,打印结果是4。因为HashSet默认的比较方式是比较对象的哈希值。而new person("lisi02",12)这个对象被new了两次,也就是有两个person("lisi02",12),这两个对象都有自己不同的哈希值,所以会被HashSet认为是不同对象。想要这两个相同,就必须在pesron类中复习hasCode()和equals()方法。代码如下- import java.util.HashSet;
- public class Demo {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- HashSet hs=new HashSet();
- hs.add(new person("lisi01",11));
- hs.add(new person("lisi02",12));
- hs.add(new person("lisi03",13));
- hs.add(new person("lisi02",12));
- System.out.println(hs.size());
- }
- }
- class person{
- String name;
- int age;
- public person(String name,int age){
-
- this.name=name;
- this.age=age;
- }
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + age;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
- }
- @Override
- 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;
- }
-
-
- }
复制代码
复写了这两个方法之后打印出来的结果就是3了,不复习的话打印结果就是4 |