将对象放在hashset中时
1 先调用hashcode获得一个散列的数,通过内部hash算法,计算出存放的位置,
2 在该位置检查是否与该位置的对象相等(调用equals方法),如果等则不放入该对象,如果不等则将该对象放在该位置的第一个
java 代码
- public class A {
- private String name;
-
-
-
-
- public String getName() {
- return name;
- }
-
-
-
-
-
- public void setName(String name) {
- this.name = name;
- }
-
-
-
-
-
-
- @Override
- public boolean equals(Object obj) {
- System.out.println("equals");
- return true;
-
- }
-
-
-
-
-
-
- @Override
- public int hashCode() {
- System.out.println("hashcode");
- return 1;
- }
-
- }
java 代码
- public void testHashA() {
- A a = new A();
- Set l = new HashSet();
- for (int i = 0; i < 10; i++) {
- a = new A();
- a.setName(String.valueOf(i));
- l.add(a);
- }
- System.out.println(l.size());
- for (Iterator iter = l.iterator(); iter.hasNext();) {
- A element = (A) iter.next();
- System.out.println(element.getName());
-
- }
-
- }
输出为:
hashcode
hashcode
equals
hashcode
equals
hashcode
equals
hashcode
equals
hashcode
equals
hashcode
equals
hashcode
equals
hashcode
equals
hashcode
equals
1//只有一个元素
0//第一个元素
List、map加入对象时不会调用着两个方法
分享到:
相关推荐
###Responsibilities### Aequum 库旨在通过使用在 POJO 类上编写equals 、 hashCode和compareTo方法时帮助删除一些样板。 请注意,此库依赖于 Java 8。 ###组件初始化指令###要使用此库,调用builder的方法Aequum...
ATM系统 Clone方法 toString方法:表示返回对象的字符串表示形式 包名.类名@hashCode(内存地址) 打印对象时,默认调用 如果不是想使用object类,toString...如果equal返回true的话,hashCode相同,重写hashCode方法
以下是关于HashCode的官方文档定义: hashcode方法返回该对象的哈希码值。... 如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相
Java集合中有两类,一类是List,一类是Set他们之间的...比如我们向HashSet插入1000数据,难道我们真的要迭代1000次,调用1000次equals()方法吗?hashCode提供了解决方案。怎么实现?我们先看hashCode的源码(Object)。
编写equals和hashCode 使用EnumMap 使用TreeMap 使用Properties 使用Set 使用Queue 使用PriorityQueue 使用Deque 使用Stack 使用Iterator 使用Collections IO File对象 InputStream OutputStream ...
EasyMock 是一种模拟测试的框架,用于辅助模拟测试。...不能 mock 类的一些特殊方法:equals(),toString() 和 hashCode()。原因是 EasyMock 在实现时为每个 class mock 对象提供了内建的以上三个方法。
jdk1.8新特性知识点: ...方法,计算出哈希码值,经过哈希算法算成数组的索引值,如果对应的索引处没有元素,直接存放,如果有对象在,那么比较它们的equals方法比较内容 如果内容一样,后一个value会将前一个value
3)默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法, 而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象) 4)要是类中覆盖了equals方法,那么就要...
在jdk1.8中对hashMap等map集合的数据结构优化。hashMap数据结构的优化 ...方法,计算出哈希码值,经过哈希算法算成数组的索引值,如果对应的索引处没有元素,直接存放,如果有对象在,那么比较它们的equals方法比较内容
2.ObjectUtils 主要是对null进行安全处理,可以设置为null时的默认返回值,比较相等时是调用对象的equals方法,因此需要对对象进行方法进行覆盖 3.SystemUtils 主要获取一些系统属性,例如工作目录等等 4.DateUtils/...
将学生对象放入一个集合,通过重写学生类的hashcode与equals方法,以及通过collections工具类调用实现caparator接口类的专门比较器及方法,对存放学生的集合进行多属性排序
在lawa中,每个对象都可以调用自己的hashCode)方法得到自己的哈希值(hashCode),相当于对象的指纹信息,通常来说世界上没有完全相同的两个指纹,但是在Java中做不到这么绝对,但是我们仍然可以利用hashCode来做一些...
JavaForger包括通用Java代码的默认模板,例如equals,hashCode,innerBuilders和针对它们的单元测试。 可以为特定于项目的重复代码创建自定义模板。 JavaForger能够直接将源代码插入现有的类中。 例子 假设我们有一...
10.4.5 远程对象与equals、hashCode和clone方法 10.5 远程对象激活 10.6 Web Services与JAX-WS 10.6.1 使用JAX-WS 10.6.2 Web服务的客户端 10.6.3 Amazon的E-Commerce服务 第十一章 脚本、编译与注解处理 11.1 Java...
9.3 实现equals、hashCode和compareTo方法 198 9.3.1 安全的Null值相等测试 198 9.3.2 计算哈希码 199 9.3.3 比较数值类型对象 200 9.4 安全需要 201 9.5 其他改动 204 9.5.1 将字符串转换为数字 204 9.5.2 全局...
最好的最简单的Java入门教程。 目录 1 Java概述 1 1.1 Java语言概述 1 1.2 Java虚拟机以及跨平台原理 2 1.3 关于JVM的执行效率 2 1.4 客户端市场的折戟 3 ...4.22 hashCode() 方法 80 4.23 toString() 方法 80
hashMap数据结构的优化,原来的hashMap采用的数据结构是哈希表(数组+链表),hashMap默认大小是16,一个0-15索引的数组,如何往里面存储元素,首先调用元素的hashcode方法,计算出哈希码值,经过哈希算法算成数组的...
14.6.3 equals与hashCode方法重写规定的作用 288 14.6.4 LinkedHashSet类的使用 291 14.6.5 SortedSet接口与TreeSet类 292 14.6.6 自定义满足Sorted集合的类 293 14.6.7 定制SortedSet的排序规则 296 14.6...
方法,计算出哈希码值,经过哈希算法算成数组的索引值,如果对应的索引处没有元素,直接存放,如果有对象在,那么比较它们的equals方法比较内容 如果内容一样,后一个value会将前一个value的值覆盖,如果不一样,在...