本帖最后由 JJJD 于 2015-6-22 00:36 编辑
以下代码是HashSet集合中判断输入元素是否重复的代码,但是代码68行,69行,70行有疑问。
问题一:68行和69行都能正常运行,那么这两行有什么不同,哪个才是规范的写法?或者这两个是根据具体情况来选择使用?
问题二:70行报错,是因为等号左边加泛型,右边就一定要泛型吗?还是其他原因?
- import java.util.*;
- class PersonDemo
- {
- private String name;
-
- public PersonDemo(String name)
- {
- super();
- this.name = name;
- }
-
- /*
- @Override是伪代码,表示重写,说下面这个方法是从父类/接口 继承过来的,需要你重写一次.
- 1.方便阅读
- 2.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错
- */
-
- //覆写toString()方法
- @Override
- public String toString()
- {
- return "name= " + name ;
- }
-
-
-
- //覆写hashCode()方法!!!!
- @Override
- public int hashCode()
- {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- return result;
-
- }
-
- //覆写equals()方法
- @Override
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- PersonDemo other = (PersonDemo)obj;
- if (name == null)
- {
- if (other.name != null)
- return false;
- }
- else if (!name.equals(other.name))
- return false;
-
- return true;
- }
- }
- public class HashSetDemo1
- {
- public static void main(String[] args)
- {
- Set<String> s= new HashSet<String>();
- //Set<String> s= new HashSet<>();
- //Set<String> s= new HashSet();
-
- s.add(new PersonDemo("jjj").toString());
- s.add(new PersonDemo("jjj").toString());
- s.add(new PersonDemo("jjj").toString());
-
- System.out.println(s);
- }
- /*
- 没有覆写hashcode和 equals方法前,显示三次(一样的)。
- 覆写后,只剩一个了!说明覆写后方法起作用了,重复的输入不进去!
- */
-
- }
复制代码
|
|