Java 重写hashCode 方法和equals方法
package Container; import java.util.HashSet;
import java.util.Iterator; /* Set 元素是无序的(存入和取出的顺序不一定一致),元素不可以重复
|---HashSet:底层数据结构是哈希表
| HashSet是如何保证元素唯一性呢?
| 是通过两个方法来完成的 hashCode 和 equals来完成的
| 如果元素的hashCode值相同,才会判断 equals 是否为true
| 如果hashCode值不相同,不会调用 equals
|
| 注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的
| hashCode和equals方法
| (arrayList判断元素是否存在只依赖于equals方法)
|---TreeSet:
Set 集合的功能和 Collection 是一致的 */ class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
} public String getname()
{
return name;
} public int getage()
{
return age;
} // 重写 hashCode 方法
public int hashCode()
{
// return 1; 这种方法也能得到效果但会调用 equals 方法,并且 比较次数比较多 // 该种方法调用 String 的hashCode 方法,就不会调用 equals 方法,比较次数少
return name.hashCode()+age*39; // 保证 hashCode 值的唯一性
} public boolean equals(Object obj)
{
if (!(obj instanceof Person))
return false; Person person = (Person)obj;
return this.name.equals(person.name) && this.age == person.age;
}
} public class HashSetDemoTwo
{
public static void sop(Object obj)
{
System.out.println(obj);
} public static void main(String[] args)
{
HashSet<Person> hs = new HashSet<Person>(); hs.add(new Person("a1", 11));
hs.add(new Person("a2", 12));
hs.add(new Person("a3", 13));
hs.add(new Person("a4", 14));
hs.add(new Person("a5", 15));
hs.add(new Person("a3", 13)); System.out.println( hs.contains(new Person("a1", 11))); // 判断 a1 是否存在于集合中
sop("al:"+hs.contains(new Person("a1", 11))); // 将 a3 移除集合中
hs.remove(new Person("a3", 13)); // 遍历集合
Iterator<Person> it = hs.iterator();
while (it.hasNext())
{
Person person = (Person) it.next();
sop(person.getname()+"==="+person.getage());
}
}
}
Java 重写hashCode 方法和equals方法的更多相关文章
- 为什么要重写hashCode()方法和equals()方法及如何重写
我想写的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法 2.在什么情况下需要重写hashCode()方法和equals()方法 3.如何重写这两个方法 **** ...
- 为什么要重写hashcode方法和equals方法
我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 /* * Copyright (c) 1994, 2 ...
- java 集合 HashSet 实现随机双色球 HashSet addAll() 实现去重后合并 HashSet对象去重 复写 HashCode()方法和equals方法 ArrayList去重
package com.swift.lianxi; import java.util.HashSet; import java.util.Random; /*训练知识点:HashSet 训练描述 双色 ...
- hashCode()方法和equals方法的重要性。
在Object中有两个重要的方法:hashCode()和equals(Object obj)方法,并且当你按ctrl+alt+s时会有Generator hashCode()和equals().我们不 ...
- hashCode方法和equals方法比较
为什么用HashCode比较比用equals方法比较要快呢?我们要想比较hashCode与equals的性能,得先了解HashCode是什么. HashCode HashCode是jdk根据对象的地址 ...
- Java连载56-toSting方法和equals方法
一.关于object中的toString方法: 1.SUN公司在Object类中设计toString方法的目的:返回java对象的字符串的表示形式. 2.在现实的开发过程中,Object里面的toS ...
- 【转】为什么要重写hashcode()方法和toString()方法
Object 类 包含toString()和hashCode()方法. 一.toString(): 在Object类里面定义toString()方法的时候返回的对象的哈希code码,这个hashcod ...
- 集合hashCode()方法和equals()办法
1.哈希码: Object中的HashCode方法会返回该对象的的内存真实地址的整数化表示,这个形象的不是真正抵制的整数值就是哈希码. 2.利用哈希码向集合中插入数据的顺序? ...
- java数组、java.lang.String、java.util.Arrays、java.lang.Object的toString()方法和equals()方法详解
public class Test { public static void main(String[] args) { int[] a = {1, 2, 4, 6}; int[] b = a; in ...
随机推荐
- tableview的reloadData应注意
http://blog.csdn.net/ouyangtianhan/article/details/7835041 http://stackoverflow.com/questions/160715 ...
- linux下配置ip地址四种方法(图文)
(1)Ifconfig命令 第一种使用ifconfig命令配置网卡的ip地址.此命令通常用来零时的测试用,计算机启动后 ip地址的配置将自动失效.具体用法如下.Ipconfig ethx i ...
- ERP软件数据库覆盖数据恢复成功/重装数据库系统软件,导致同名文件覆盖
ERP软件数据库覆盖数据恢复成功/重装数据库系统软件,导致同名文件覆盖 [数据恢复故障描述] 上海某酒店ERP软件原来安装在C盘上,用户误操作把软件进行了卸载,发现软件没有了, 但操作之前没有把原 ...
- iOS开发之监听键盘高度的变化 分类: ios技术 2015-04-21 12:04 233人阅读 评论(0) 收藏
最近做的项目中,有一个类似微博中的评论转发功能,屏幕底端有一个输入框用textView来做,当textView成为第一响应者的时候它的Y值随着键盘高度的改变而改变,保证textView紧贴着键盘,但又 ...
- camstar --飞达上料
业务场景:某工厂的SMT车间接到生产PCB(3151502),数量1000片.如果实现飞达进行上料,并在贴片机工作时,系统自动进行物料消耗.3151502的BOM为1107790,1107792,11 ...
- Lambda表达式例子
转 Lambda表达式例子 1.Java8 新特性介绍 写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下: Lambda表达式 函数式接口 Stream Optional ...
- jQuery API 中文文档
Reference: http://www.css88.com/jqapi-1.9/jQuery.proxy/
- Java的进制转换操作(十进制、十六进制、二进制)
2014-05-06 17:34 吴文付 最近由于工作上的需要,遇到进制转换的问题.涉及到的进制主要是 十进制,十六进制,二进制中间的转换. 这里整理一下.具体的计划为:封装一个转换类,一个测试类. ...
- bzoj2120: 数颜色 &&bzoj2453: 维护队列
题目大意: 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会依据个人喜好 ...
- [原]崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs
最近项目里遇到一个崩溃,不定期出现,很是头疼!今晚终于忍无可忍,下决心要干掉它!(于是用凉水洗了把脸,开始分析dump)希望凌晨的这篇总结对有相似经历的朋友有所启发!(看之前相关的几个dump可以猜到 ...