集合类hashCode()方法和equals()方法

1、散列码:

Object中的HashCode方法会返回该对象的的内存真实地址的整数化表示,这个形象的不是真正抵制的整数值就是哈希码。

2、利用哈希码向集合中插入数据的顺序?

向HashSet中添加对象时,HashSet先通过该对象的HashCode()计算出相应的桶,然后再根据equals()方法找到相应的对象,如果容器中已存在该对象则不再添加,如果不存在,则添加进去。

3、什么时候重写hashCode()方法?

        String和Integer这些Java自带的类都重写了hashCode()方法,如果String和Integer
new出来的对象的内容是一样的,则这些对象的hashCode返回值也是一样的,尽管这些对象占用的哦是不同的内存

如果程序员希望自己定义的类对象,占用不同的哦内存空间时,但内容却是一样的对象调用hashCode方法返回值是一样的,则程序员必须自己重写hashCode()方法,如本程序的B类

4、怎么重写hashCode()方法和equals()方法:

必须同时实现equals()方法 和 hashCode() 方法,只要有任意一个方法没有实现

装入时就会出现重复元素

5、什么容器必须的重写equals方法和hashCode方法?

Hashtable  HashSet  HashMap都必须的同时实现equals()方法和hashCode()方法,TreeSet和TreeMap则不需要实现equals()方法和hashCode()方法

时间: 2024-08-29 03:33:39

集合类hashCode()方法和equals()方法的相关文章

java为什么要重写hashCode方法和equals方法?

之前发布过一篇文章说的是关于 equals方法重写 http://www.cnblogs.com/aL0n4k/p/4777333.html 下面就hashCode方法发表一下本人的理解,仅供参考,交流. 在 关于java重写equals方法 已经提及说,比较2个对象的时候,要比较他们各自的属性. 那么重写hashCode方法是因为我们在接触到集合的时候,里面有个Set接口,他只能添加无序以及不重复的对象元素. 那有人会问,既然是这样我们直接用equals判断不就完了么? 实际上对Set集合而言

Java 重写hashCode 方法和equals方法

package Container; import java.util.HashSet; import java.util.Iterator; /* Set 元素是无序的(存入和取出的顺序不一定一致),元素不可以重复 |---HashSet:底层数据结构是哈希表 | HashSet是如何保证元素唯一性呢? | 是通过两个方法来完成的 hashCode 和 equals来完成的 | 如果元素的hashCode值相同,才会判断 equals 是否为true | 如果hashCode值不相同,不会调用

Java连载56-toSting方法和equals方法

Java连载56-toSting方法和equals方法一.关于object中的toString?方法: 1.SUN公司在Object类中设计toString方法的目的:返回java对象的字符串的表示形式. 2.在现实的开发过程中,Object里面的toString方法已经不够用了,因为Object的toString方法实现?的结果不满意.Object中的toString方法实现的结果不满意.Object中的呢toString?方法要被重写了. 3.println打印的如果是对象的话,那么就会默认

java 数组的 toString 方法和 equals 方法以及 java.lang.Object 对象的 toString 方法和 equals 方法

1 public class Test { 2 public static void main(String[] args) { 3 int[] a = {1, 2, 4, 6}; 4 int[] b = a; 5 int[] c = {1, 2, 4, 6}; 6 7 //下面这个方法打印的是a数组的引用地址 8 System.out.println(a.toString()); 9 //下面这个方法比较的是两个数组的引用是否相等 10 System.out.println("a.equals

java课堂笔记------toString方法和equals方法

* 重写toString方法 * 当我们需要使用当前类的toString方法时,通常我们 * 就需要重写该方法.具体返回字符串的格式没有严格 * 要求,可根据将来实际开发中的需求而定.但通常反 * 回的字符串中应当包含当前类的属性值,以便了解当前 * 对象的信息. * 格式:(x,y) public String toString(){ return "(" + x + "," + y + ")"; } * 通常我们会重写一个类的equals方法

JAVA 面向对象补充[toString方法和equals方法]

一.toString  方法 这里的toString  和 C#的To string 是两回事. JAVA中to string : Object类中都有一个to string() 方法,创建的每一个类都会继承这个方法,返回一个对象的String 表示. 代码: 注释代码后结果: 取消注释后结果: 二.equals方法

ServletContext结合Servlet接口中的init()方法和destroy()方法的运用----网站计数器

我们一般知道Servlet接口中的init()方法在tomcat启动时调用,destroy()方法在tomcat关闭时调用.那么这两个方法到底在实际开发中有什么作用呢?这就是这个随笔主要讲的内容. 思路:网站计数器,如果想在服务器关闭时,保留以前的访问量,最简单的方式是把访问数据放在数据库中,但这样会增加服务器的压力.所以ServletContext结合Servlet接口中的init()方法和destroy()方法的一起使用便可以做一个网站计数器. 把数据写在一个.txt文件中,在init()方

Android HTTP实例 使用GET方法和POST方法发送请求

Web程序:使用GET和POST方法发送请求 首先利用MyEclispe+Tomcat写好一个Web程序,实现的功能就是提交用户信息:用户名和年龄,使用GET和POST两种提交方式. 用浏览器打开: 不管以哪一种方式,提交以后显示如下页面,将提交的信息再显示出来. 关键代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% Str

【学习笔记】【OC语言】set方法和get方法

1.set方法和get方法的使用场合@public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数2.set方法作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值命名规范:方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写形参名称不要跟成员变量同名3.get方法作用:返回对象内部的成员变量命名规范:get方法的名称一般就跟成员变量同名4.成员变量的命名规范成员变量都以下