Java学习篇之自定义类的相关重写方法
来源:互联网 发布:淘宝买家退款率计算 编辑:程序博客网 时间:2024/06/06 01:15
上篇博客(Java学习篇之Map集合的遍历方法集锦 )中有一段自定义的Student类的代码,期间涉及到了好多重写方法,下面就根据一个新的案例对部分重写方法进行总结,部分说明文字还是体现在了代码注释中:
自定义Person类:
package hashCode;public class Person {private String name;private int age;//空参构造,使得用户可以直接实例化一个空参的//对象,再利用对象的set方法进行赋值或者利用//get方法进行取值(相关方法的写法见本类代码最下方)public Person() {super();}//有参构造,便于用户在实例化的同时进行进行赋值和方法的调用public Person(String name, int age) {super();this.name = name;this.age = age;}@Override//重写toString方法,不然打印出的是地址public String toString() {return name+".."+age;}//重写的父类equals方法,保证唯一性public boolean equals(Object obj){if(this==obj){return true;}if (obj==null){return false;}if (obj instanceof Person){Person p=(Person)obj;return name.equals(p.name) && age==p.age;}return false;}@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;}//get和set方法,私有变量,对外提供访问接口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;}}
测试类:
package hashCode;/* * 实现存储内容的去重 */import java.util.HashSet;//打印出的结果:[bb..11, aa..11, Aa..11, BB..11]public class HashCodeTest {public static void main(String[] args) {HashSet<Person> setPerson=new HashSet<Person>();setPerson.add(new Person("aa",11));setPerson.add(new Person("aa",11));setPerson.add(new Person("bb",11));setPerson.add(new Person("BB",11));setPerson.add(new Person("Aa",11));setPerson.add(new Person("aa",11));setPerson.add(new Person("aa",11));System.out.println(setPerson);}}
上述重写的方法有很多,特地说明下重写hashcode(),equals()方法的原因:自定义的类的hashcode()和equals()继承于Object类,其hashcode码为默认的内存地址,这样的话即使含义相同的两个对象,比较也是不相等的,如果不重写hashcode()方法的话。重写hashcode(),equals()方法是为了保证二者的同步关系。
该案例是比较自定义的Persona类对象,所以需要重写两个方法,该实例就是为了达到去重的目的,所以测试类中用的是set接口下的实现类HashSet类,我尝试将测试类代码中的HashSet那句话换成了如下:
List<Person> setPerson=new ArrayList<Person>();
得到的结果就不是去重的了,而是原样打印出来,所以说,set接口的特性(不存储重复元素)的原因也许就在于这里,度娘的意思貌似是和hash有关的自定义类都会用到这两个方法进行重写比较,而且给出了结论:对于equals()相等的两个对象,其hashCode()返回的值一定相等。
要是对以上内容还是模糊,就记住下面的话吧!比较两个对象是否相等的时候,先看哈希值(利用hashCode()方法),哈希值相同再比较内容(利用equals()方法),双重限定。
1 0
- Java学习篇之自定义类的相关重写方法
- JAVA学习.方法的重写
- Java之方法的重写
- java学习之路,方法重写
- JAVA学习总结之方法重写
- java之方法重写
- Java之方法的重写、重载、泛型
- Java基础之方法的重写
- java学习之重写
- Object类学习之equals方法重写
- JAVA中自定义对象比较时重写equals()方法的同时要重写hashcode()方法
- java基础学习之——子类重写(覆盖)父类的方法必须满足的条件
- JAVA-方法的重写
- java 方法的重写
- Java方法的重写
- Java的方法重写
- JAVA 方法的重写
- java方法的重写
- Android打开或者关闭GPS
- 独立成分分析 ( ICA ) 与主成分分析 ( PCA ) 的区别
- Fragment中数据重复请求
- 数据结构算法演示
- LintCode : 用栈实现队列
- Java学习篇之自定义类的相关重写方法
- Polygon和Polyline
- 银行家算法
- Atom编辑器入门到精通(七) 编辑配置文件
- 进程、会话、连接之间的差异
- 常用开源库(非常慢的更新)
- (OK) Android graphic (12)—display上层相关概念、关系 - mLogicalDisplays.get(Display.DEFAULT_DISPLAY)
- Sublime Text 3 编译 Python 只出现 Finished in 0.5s
- Linux学习笔记(一)