黑马程序员——HashCode与equals

AIR780E二次开发点灯(LuatOS) Air780E的LuatOS点灯教程,二次开发教程,可用于所有ec618平台,无需SDK 阅读详情

 ------- android培训、java培训、期待与您交流! ----------                                       

HashCode与equals方法详解

1.      首先equals()和hashcode()这两个方法都是从object类中继承过来的。 
equals()方法在object类中定义如下: 
  public boolean equals(Object obj) { 
return (this == obj); 
} 
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。

2.      hashCode方法是返回对象的哈希码值

定义如下:

Public inthashCode()

{

        retuen value;

 

}

3.      而在collection集合中,HashCode和equals方法结合使用,下面详细分析一下程序构造,帮组理解collection中各种方法之间的潜在关系。

Example:

⑴.       import java.util.*;

class univer

{

              public static void main(String [] args)

              {

                     ArrayList al = new ArrayList();

①al.add(new Person("john01",21));

al.add(new Person("john02",22));

al.add(new Person("john03",23));

al.add(new Person("john04",24));

 

                     Iterator it = al.iterator();                                                                                                 

                     while(it.hasNext())

                            {

②Person p = (Person)it.next();

                                          sop(p.getName()+""+p.age());

③

                     //sop(it.next().getName()+" "+it.next().p.age());

 

              }

             

       }

       public static voidsop(Object obj)

       {

              System.out.println(obj);

       }

 

 

}

class Person{

       private String name;

       private int age;

       Person(String name,intage)

       {

              this.name=name;

              this.age=age;

             

       }

       public String getName()

       {

              return name;

       }

       public int age()

       {

              return age;

       }

      

}

这个程序说明了一些迭代器基础,下面做一个分析:

①.  这几句话都用到了add方法,注意add方法的定义为:add(Object obj), ,而add(new Person(""));传参为new Person。既有:Object obj = new Person();故而就把new person提升为Object类型。所以,在这里,person类型被提升了,需要特别注意。

②.  首先要明确next方法返回的是Object类型的对象。故而可以用(Person)it.next();来强制转换被提升的it迭代器指向的Object obj=new Person()对象。

③.  第三条语句是被注释掉的,用来更好的说明it.next()的一些问题。

第一个it.next()打印的是jhon01,而第二个it.next()打印的是jhon02的年龄22;

因为it.next()是指向下一个对象地址的迭代器,故每次循环,it.next()都会指向下一个对象。注意:it.next()返回的类型为Object类型,因为迭代器不知道他将要接收什么类型,故都设为Object类型。

⑵.Example:

      

import java.util.*;

class univer

{

       publicstatic void main(String [] args)

       {

              ArrayListal = new ArrayList();

              al.add(newPerson("john01",21));

             

              al.add(newPerson("john02",22));

              al.add(newPerson("john03",23));

              al.add(newPerson("john03",23));

              al.add(newPerson("john04",24));

              al.add(newPerson("john04",24));//注意;每new一次,都为不同的对象。

             

              al=singleEelement(al);

              Iteratorit = al.iterator();

             

              while(it.hasNext())

              {

                     Personp = (Person)it.next();

                     sop(p.getName()+""+p.age());

                    

              }

             

       }

       publicstatic void sop(Object obj)

       {

              System.out.println(obj);

       }

       publicstatic ArrayList singleEelement(ArrayList al)//代码块,去除相同元素。

       {

              ArrayList newAl = new ArrayList();//定义一个临时容器。

              Iteratorit = al.iterator();

              while(it.hasNext())

              {

                     Objectobj = it.next();

 

①           if(!newAl.contains(obj))             

              {                  

                     newAl.add(obj);

              }

             

                                                 }

              returnnewAl;

       }

 

}

 

class Person{

       privateString name;

       privateint age;

       Person(Stringname,int age)

       {

              this.name=name;

              this.age=age;

             

       }

②

       public boolean equals(Object obj)        

    

       {

③

              if(!(obj instanceof Person))

 

//instanceof,判断obj是否为Person类的一个实例。

                     returnfalse;

              Personp = (Person)obj;

④

       return this.name.equals(name)&&this.age==p.age;

      

                     }

      

       publicString getName()

       {

              returnname;

       }

       publicint age()

       {

              returnage;

       }

      

}

首先说明,这个代码块是去除相同元素,通过public static ArrayList singleEelement(ArrayList al)与public boolean equals(Object obj)函数的共同合作来完成这个功能。

设计思想是:通过publicstatic ArrayList singleEelement(ArrayList al)方法,定义一个临时容器,然后把去除相同元素的对象存入临时容器,然后返回给主容器。

下面我们做个一个详细的分析:

①.第一步:开始newAl为null,显然,null和al中的第一个对象不相同,那么newAl.contains(obj)就为false,加个!为true,就执行newAl.add(obj),然后,newAll集合对象中就存入了元素;

第二步:在while循环中继续newAll.contains(obj)的执行。这次new Person("john02",22)进入,contains将会自动调用equals方法来比较,两个内容是否相同。如果不同,就继续存入newAll.然后john03再进来与newAll中每个元素进行比较,如果相同就存入临时容器。

contains(Objectobj),参数obj传过来后,即为: newAll (obj==null ? e==null: obj.equals(e)) 的元素 e 时才返回 true。

例如:list.contains(o),系统会对list中的每个元素e调用o.equals(e) 方法, 加入list中有n个元素,那么会调用n次o.equals(e), 只要有一次o.equals(e)返回了true,那么list.contains(o)返回true,否则返回false。建议覆盖equals方法。

第三:

具体就本程序说一下运行流程:

第一步:开始newAl为null,显然,null和al中的第一个对象不相同,那么newAl.contains(obj)就为false,加个!为true,就执行newAl.add(obj),然后,newAll集合对象中就存入了元素;john01就进入了newAll中。

第二步:john02(为了方便,用john02代表new Person(“john02”,22))进入obj;然后newAll中元素john01自动调用equals方法来比较他们内容是否相同,经过比较,不相同,然后把john02存入newAll。

第三步:john03进入,然后newAll中john02,john01分别调用equals函数与john03比较,发现都不相同,故把john03存入newAll。

第四步:下面又一个john03进入,原理是newAll中所有对象都调用一次equals方法,来比较是否相同,然而newAll中john03第一次调用时就发现他们元素相同,故把thisjohn03舍去,不在存入newAll,而后面也不再需要比较了。以下后来的元素同以上三步相同。

②.public boolean equals(Objectobj)

equals方法继承自Object类,它是比较两个对象的内容是否相同。

 

③    .if(!(obj instanceof Person))

这句话的意思是判断:obj不是Person类的一个实例。当然去掉!符号,那么obj是Person的一个实例。

obj instanceofPerson 表示:obj是否为Person类的一个实例,如果是:返回true。显然本程序obj是Person的一个实例,返回为true。但是加了一!符合。

④.  returnthis.name.equals(name)&&this.age==p.age;

这句话,我就想解释一下这里的this和p所表示的含义:

当john01进入存入newAll后,john02进来,执行到newAll.contains(obj)时,就转入了equals方法,那么当时this就代表当前对象的john02,p就代表john01.

 

总的来讲:就是需要newAl中的每个元素都调用一次equals方法。

 

注意:sop("remove:"+al.remove(new Person("john03",22))),删除al中的john03,22;但是注意:仅凭这一句,不和public boolean equals(Object obj)这个函数结合使用,那么,remove还是失败。原因在于:new一次Person,就为不同的对象,不同对象实际上具有不同的地址。

而且remove在底层也要使用equals方法,和contains一样。用要删除的元素与al中每个元素比较,相同即为要删元素。

注意:List集合判断元素是否相同,依据的是元素equals方法。其他集合不一样,特别注意。

 

             

注意:contains方法是关键点:之前之所以去掉重复元素不成功,

                      * 是因为没有public boolean equals(Object obj)这个函数,

                      * 因为contains函数运行时会自动调用equals函数来比较元素是否相同。

                      * API文档就有说明:

⑶.Example:

 

import java.util.*;

class univer

{

    public static void main(String [] args)

    {

       HashSet al = new HashSet();

       al.add(new Person("john01",21));

       al.add(new Person("john02",22));

       al.add(new Person("john03",23));

       al.add(new Person("john03",23));

       al.add(new Person("john04",24));

       al.add(new Person("john04",24));      

       //al=singleEelement(al);

       Iterator it = al.iterator();      

       while(it.hasNext())

       {

           Person p = (Person)it.next();

           sop(p.getName()+"......"+p.age());

          

       }     

    }

    public static void sop(Object obj)

    {

       System.out.println(obj);

    }

   

 

}

class Person{

    private String name;

    private int age;

    Person(String name,int age)

    {

       this.name=name;

       this.age=age;

      

    }

    public int hashCode()

    {

       System.out.println(this.name+".......hashCode");

       return 60;

    }

    public boolean equals(Object obj)

    {

       if(!(obj instanceof Person))

           return false;

       Person p = (Person)obj;

       System.out.println(this.name+"...equals..."+p.name);

      

       return this.name.equals(name)&&this.age==p.age; 

    }

   

    public String getName()

    {

       return name;

    }

    public int age()

    {

       return age;

    }

   

}

 

①.System.out.println(this.name+"...equals..."+p.name);

       this表示当前对象,p表示参数obj;特别注意this和p所代表的含义:

       这里明确说一下:

②.

    第一步:john01调用hashCode后返回哈希码,然后存入内存。结束当前对象的旅程。

       第二步:john02调用hashCode后返回相同的哈希码值,存入内存时,发现此位置已被占据,然后john01对象就调用equals方法比较其内容是否相同,《注意是john01发起的调用》内容不相同,john02将被散列存入内存。

    第三步:john03进入调用hashCode函数,当然的明确现时刻当前对象为john03,这很重要。还是返回相同的哈希吗,然后john03分别于john02比,john02调用equals方法,然后与john01比,  john01调用equals方法。具体过程就是这样。与前面contains方法有异曲同工之妙。

③

程序运行步骤:

      首先明确:HasHSet类容器会自动调用hashCode方法,

      如果像本程序hashCode返回的哈希值都为60;

      这就说明Hashset对象具有相同的地址3c,那么如果HashSet对象具有相同的地址,

      就必须调用equals方法,john01,jhon02先后调用hashCode方法,

      返回了相同的地址,故而调用equals方法。john02与john01比较,发现内容不同,故把john02存入。

    下面在是john03调用hashCode方法,返回地址3c,john03分别于john02,john01比较,发现内容都不通,

      然后存入,依次类推,发现内容相同时,不存入。

      去除内容相同元素。

    为什么要这样,因为HashSet不允许相同元素(equals==ture)同时存在在结构中。

    假如employeeX(1111,“张三”)和employee(1111,"李四"),

    而Employee.equals比较的是name。这样的话,

    employeeX和employeeY的equals不相等。

    它们会根据相同的散列码1111加入到同一个散列单元所指向的列表中。

    这种情况多了,链表的数据将很庞大,散列冲突将非常严重,查找效率会大幅度的降低。

 

总结一下

      HashSet不能重复存储equals相同的数据。原因就是equals相同

      ,数据的散列码也就相同(hashCode必须和equals兼容)。

      大量相同的数据将存放在同一个散列单元所指向的链表中,造成严重的散列冲突,

      对查找效率是灾难性的。

⑷.

Example:

①.import java.util.*;

class Text{

    public static void main(String [] agrs)

    {

       TreeSet t = new TreeSet();

       t.add("l");

       t.add("u");

       t.add("o");

       t.add("p");

       Iterator it = t.iterator();

       while(it.hasNext())

       {

           System.out.println(it.next());

       }

      

    }

}

这个程序是TreeSet类的实例,TreeSet类具有自动排序的功能,所以程序输出:l o p u,

从小到大。

②.

Examp:

 

import java.util.*;

class univer

{

    public static void main(String [] args)

    {

       TreeSet al = new TreeSet();

       al.add(new Student("john01",22));

       al.add(new Student("john02",22));

       al.add(new Student("john03",21));

       al.add(new Student("john04",20));     

      

       Iterator it = al.iterator();      

       while(it.hasNext())

       {

           Student p = (Student)it.next();

           sop(p.getName()+"......"+p.getAge());

          

       }     

    }

    public static void sop(Object obj)

    {

       System.out.println(obj);

    }

   

 

}

①

class Student implements Comparable

 

{//该接口强制让学生具备比较性,因为学生一个对象,是没有比较性的。

    private String name;

    private int age;

    Student(String name,int age)

    {

       this.name=name;

       this.age=age;

    }

    public String getName()

    {

       return name;

    }

    public int getAge()

    {

       return age;

    }

②

    public int compareTo(Object obj)

 

//覆盖的方法不能异常声明。

    {

 

       if(!(obj instanceof Student))

           throw new RuntimeException("obj is not student");

       Student s= (Student)obj;

       if(this.age>s.age)

           return 1;

       if(this.age==s.age)

③

           return this.name.compareTo(s.name);

 

       return -1;

    }

   

}

   

对TreeSet类的一些低端自动调用功能的一些说明:

①.             说先说明,add方法添加进来的new Person对象不具有可比性,如果可以比,那怎么比,不可能比地址吧,所以Student对象不具有可比性。那么我要比较它,就要强制把它转换为可比性。

那么这时就有:public interface Comparable<T>接口提供这个功能。此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序,类的 compareTo 方法被称为它的自然比较方法。

那么在这个程序中实现接口的类是Student类。所以它强制对这个对象进行排序。通过compareTo方法。

②public int compareTo(Objectobj)

此方法是覆盖了接口中的方法,注意:覆盖的方法不能在方法头申明异常,所以抛出异常只能是RuntimeException类的异常。

②.this.name.compareTo(s.name)

这里这个compareTo方法是String类本身的一个方法,

public finalclass String

extends Object

implements Serializable, Comparable<String>, CharSequence

从上面发现:String类本身就实现了Comparable接口。

故而有:public int compareTo(String anotherString)

③.因为name是String类型的字符串,所以可以【this.name.compareTo(s.name)

】这样来比较他们大小。

按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象在参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只有在方法 equals(Object) 返回 true时才返回 0。

 

改程序排序结果为:john04......20 john03......21 john01......22

john02......22

------- android培训、java培训、期待与您交流! ----------

 详情请查看:http://edu.youkuaiyun.com/heima

 

QT触摸屏开发:如何通过重写事件处理实现精准按键长按检测 本文针对QT触摸屏开发中按键长按检测不精准的常见问题,深入剖析了传统信号机制失效的原因,并提供了通过重写事件处理函数(event)的解决方案。文章详细介绍了创建自定义TouchButton类、直接处理QTouchEvent以实现可靠长按检测的完整步骤与代码示例,并分享了进阶优化与避坑指南,帮助开发者实现跨平台一致的精准交互。 阅读详情

相关推荐

Claude Code长期记忆:优雅的上下文管理

ClaudeCode的上下文管理系统采用三层架构设计,通过智能压缩和优化策略在记忆容量与性能间取得平衡。系统包含短期记忆(高速工作区)、中期记忆(智能蒸馏器)和长期记忆(持久化知识库)。当Token使用率达到92%阈值时启动wU2压缩器,采用8段式结构化摘要保留关键信息,并配合智能文件恢复和渐进式预警机制。该系统通过分层处理、优雅降级和透明化交互,为AI应用提供了高效可靠的上下文管理方案,展现了在有限资源下实现智能记忆的艺术。

m0_53117338的博客 3817

黑马程序员_HashCode与equals

-------------------------------------------------android培训、java培训期待与您交流!---------------------------------- 一、概述 1. 关于Object类的equals方法的特点 a) 自反性:x.equals(x)应该返回true b) 对称性:x.equals(y)为true,那么y.eq

诚惜的专栏 328

SNAP新手避坑指南:手把手教你搞定Sentinel-2影像的镶嵌与重采样(附详细参数)

本文为SNAP新手提供Sentinel-2影像处理的详细指南,重点讲解镶嵌与重采样的关键步骤和参数设置。通过实际案例和常见问题解决方案,帮助用户避免常见错误,高效完成遥感影像处理任务。

weixin_29271263的博客 406

hashcode()和equals()的区别

hashCode()和equals()的区别 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码。equals()和hashCode()都不是final方法,都可以被重写(overwrite)。 本文介绍了2种方法在使用和重写时,一些需要注意的问题。 一、equal()方法 Object类中...

黑马程序员广州中心的专栏 144

12V INPUT电源电路设计中的关键保护机制解析【精简】

本文深入解析了12V INPUT电源电路设计中不可或缺的关键保护机制。针对常见的电源反接、过压及浪涌等风险,文章详细拆解了PMOS防反接、TVS过压钳位、OVP芯片关断以及快速断电电路等核心防护方案的设计原理、选型要点与实战优化技巧,旨在帮助工程师构建可靠、经济的电源前端防御体系。

weixin_29158047的博客 228

【树莓派4B】八、树莓派软路由,Ubuntu18.04配置路由转发

我的目的是通过把树莓派做成一个软路由,相当于一个智能路由器。 材料 树莓派4B,操作系统其实可以是其他的Linux版本。以为4B自带无线网卡,就用自带无线网卡作为路由出口。 大概思路 具体步骤 配置两个网卡的IP sudo vim /etc/network/interface 这里设置静态IP,也可以动态获取。 #Local loopback auto lo iface lo inet loopback #Ethernet0 auto eth0 iface eth0 inet static addr

林愿留的博客 10万+

黑马程序员—java中的hashCode与equals

1.HashCode

HOLLYWOOD2012的专栏 537

零成本矩阵玩法:1人运营5个账号的自动化工具链配置(2025全平台实战)

通过“AI内容生产+工具链分发+自动化变现”的组合拳,即使是新手也能实现1人运营5个账号的规模化收益。关键在于选对工具与设计标准化流程。未来,矩阵运营的竞争将聚焦于工具使用效率与数据洞察深度,快人一步者方能抢占先机!

TuFuir的博客 3786

黑马程序员——equals方法和hashCode方法的问题

---------------------- android培训、java培训、期待与您交流! ---------------------- 在没有看视频是之前自己是给hashCode和equals这两个方法搞的很晕,自己一直在想为什么重写hashCode的时候必须的重写equals方法,现在 看了视频终于真相大白了。 一般复写这两个方法的时候是在对象存进集合的时候。因为在存进集合的

beilaozai的专栏 858

Pulseaudio之同步/异步(十一)

PulseAudio是一个声音服务器,一个后台进程从一个或多个音源(进程或输入设备)接受声音输入 然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。 PulseAudio的主要特点包括: 可对每一个应用程序进行音量控制Per-application volume controls 可扩展的插件与支持可装载模块架构 兼容性许多流行的音频应用程序 支持多重音源和多重输出 低延时操作和支持延迟测量 一个对处理器资源效率零拷贝内存架构 能够发现本地网络上使用PulseAu

Android系统攻城狮 1001

Python入门实战:Python生物信息学编程基础

本文旨在为生物学背景的研究人员和对生物信息学感兴趣的程序员提供一个全面的Python生物信息学编程入门指南。我们将从Python基础知识开始,逐步深入到生物信息学特定的工具和技术,最终达到能够独立开发生物信息学分析程序的水平。Python编程基础生物信息学常用数据结构和算法DNA和蛋白质序列分析基因组数据处理生物信息学数据可视化Biopython库的使用实际项目案例背景介绍:概述文章目的、范围和预期读者核心概念与联系:介绍Python和生物信息学的基本概念。

AI架构师小马 1514

黑马程序员-hashcode与equals的作用

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------   1.hashcode是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有 例如内存中有这样的位置 0 1 2 3 4 5 6 7 而我有个类,这个类有个字段叫ID,我要把这个类存放在以上8个位置之一,如果不用hashcode而任意存放,那么当查找

remo866的专栏 525

实战避坑:基恩士KV8000 PLC与C#上位机链路通讯全流程实现(含ST代码+上位机源码)

本文详细讲解了基恩士KV8000 PLC与C#上位机的TCP链路通讯实现,从PLC端的ST代码编写、通讯配置,到上位机的通讯类封装、界面实现,再到实战避坑和性能优化,提供了完整的可复用方案。该方案已在实际产线项目中验证,支持实时数据采集和控制指令下发,稳定性和可靠性满足工业场景需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1177

黑马程序员-hashSet的存储、检索与hashCode和equals的问题

public class ReflectPoint { private Date birthday = new Date(); private int x; public int y; public String str1 = "ball"; public String str2 = "basketb

梁剑的专栏 748

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

黑马程序员------- "==",equals和hashcode

在java中,可以通过==和equals()来比较变量和对象是否相同,那么他们都哪些区别呢   首先是变量 int x = 1; int y = 1; System.out.println(x==y); //返回true System.out.println(x.equals(y)); //编译无法通过   打开java源码查看equals()方法发现,只有两边都是一个Objec

u011599816的专栏 368

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

黑马程序员-hashCode()的作用

——- android培训、java培训、期待与您交流! ———-问题:hashCode()在对象比较时很常用,那么它的作用究竟是什么? 1)利用哈希算法,提高了查找效率。 2)hashCode必须在哈希集合中才有用。 3)防止内存泄露。对象不用了,但是他没有被释放掉,一直占用内存。看下面实例1:定义已知类ReflectPointclass ReflectPoint { private

qq_30468305的博客 611

黑马程序员_集合HashSet和hashCode算法

一、hashCode算法        hashCode算法由来        果想查找一个集合中是否包含有某个对象,大概的程序代码怎样写呢?当发现某个元素与要查找的对对象进行equals方法比较的结果相等时,则停止继续查找并返回肯定的信息,否则返回否定的信息。如果是一个集合中有很多元素,譬如有一万个元素,并且没有包含要查找的对象时,则意味着你的程序需要从该集合中取出一万个元素进行啄一的比较才

u013320972的专栏 893

黑马程序员--07.集合框架--02. 重写HashCode的内存变化过程以及两种重写hashCode方式的比较【个人总结】

重写HashCode       重写HashCode的内存变化过程 两种重写方式的比较 ----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------ (1). 主要代码 class Person{ private String name; private int age; public stat

歆明正航的专栏 3313

黑马程序员——Set集合+hashCode+比较器

——- android培训、java培训、期待与您交流! ———-1.Set集合 Se接口方法和父接口Collection一样 * Set接口派系特点 不允许存储重复元素 无序集合,不保证迭代顺序 没有索引Set集合迭代方式,迭代器,增强for /* Set集合存储字符串并迭代 使用Set接口实现类 HashSet进行演示 接口和实现类多态调用,带泛型

qqyy789456的博客 603

黑马程序员_ArrayList_HashSet及Hashcode的分析

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

LoveMyAbel的专栏 490

[黑马程序员]集合_ArrayList练习时为何要重写equals方法

一直对Java中的==和equals用法不太明白,这里简单搞一下。 简单来讲: 基本数据类型比较:  ==,比较的是值。 对象分两种: ==,比较对象的地址 equals,不同的类对比的内容不同。 eg. Object的qeuals:说白了,就是对比的地址。当爹的最简单,留下事情让后辈去搞。。。 public boolean equals(Object obj)

tomlucky001的专栏 1453

黑马程序员 Java Object类与包

Object类 Object:所有类的根类。 Object是不断抽取而来,具备着所有对象都具备的共性内容。 常用的共性内容 equals方法: 指示其它某个对象是否与此对象“相等”。 equals和==的区别: 经常被简单的理解为equals方法用来比较两个对象是否相同, 而==比较运算符用来比较两个基本数据类型的数值是否相同。 这样的理解无可厚非,但还要透过简单看看本质,才

h 819

黑马程序员JavaSE基础加强d2

———javaSE基础加强d1—05-Set集合系列-TreeSet———————————————————————javaSE基础加强d1—12-Stream流-常用中间方法—————————————————————javaSE基础加强d1—01-Set集合系列-特点————————————————————————javaSE基础加强d1—02-Set集合系列-底层原理——————————————————————javaSE基础加强d1—09-Map集合-综合案例————————————————————

XingchenLielong的博客 852

黑马程序员_java中的hashcode和equls总结

---------android培训、java培训、期待与您交流! --------- equals()反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。 而hashCode()是对象或变量通过哈希算法计算出的哈希值。 之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCo

jkl123357741的专栏 587

黑马程序员_Object类

------- android培训、java培训、期待与您交流! ---------- java类默认继承属于Object类,用一句话形容就是:"啥都是东西"。Java类继承了Object的所有属性和方法,如:toString(),hashCode(),equals() 1) toString()方法 · 经常由系统默认调用,是活动当前对象的文本描述 · Object默认返回值:全限定名@

javabean8的专栏 485

黑马程序员_对象的比较

-------android培训、java培训、期待与您交流! ---------- Equals方法: Object类中的equals方法用于检测一个对象是否等于另外一个对象。在Object类中这个方法判断两个对象是否有相同的引用。如果两个对象有相同的引用,它们一定是想等的。 然而,对于多数类来说,这种判断并没有什么意义。例如,采用这种方式比较两个PrintStream对象是否相等就完全没

u013963996的专栏 533

黑马程序员——Java中HashSet中hashCode()的原理

一直以来,只知道如果用HashSet或HashTree存储一个自定义类型对象,那么该类中一定要重写hashCode()、equas()两个方法,但具体原因今天看了张孝祥老师的视频才知道,豁然开朗啊!而且我感觉老师讲出了hashcode的来源。

taooattao的专栏 535
上一篇: 黑马程序员--Collection接口下各种子接口和类
下一篇: 黑马程序员——对IO流的总结
HPerfectLife
博客等级 码龄14年 0粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值