zoukankan      html  css  js  c++  java
  • hashcode和equals

    Java中集合(Collection):一类是List另外一类是Set;

          区别:list中元素有序,可重复

             Set元素无序,不能重复

    如何保证元素不重复呢?Object.Equals

    但是当添加的元素到后面会非常多,每添加一个元素就增加一个,就会检查一次,比如添加10001个元素时候,就会检查1000次;这样是非常影响性能的;

    于是,出现了哈希表,哈希算法(散列算法):将数据按照某种算法,直接指定到一个地址上;

    暂时可以这样理解:hashcode返回的是存储对象的物理地址(也有可能不是)

    当需要添加新的元素时,调用这个元素的hashcode方法,直接定位到它应该存放的物理地址,如果这个位置没有元素,就插入数据,不再进行任何比较;如果这个位置有元素,就会调用Equals方法,与新元素比较,如果相同,就不存入。

    如果不同,就散列其他位置,其实就是一个解决冲突的问题,这样调用equals的次数就大大减少了。

    1、如果两个对象相同,那么它们的hashCode值一定要相同;

    2、如果两个对象的hashCode相同,它们并不一定相同

    PS:对象相同说的是Equals比较,Equals只能比较引用类型

    equals(Object obj)方法用来判断两个对象是否“相同”,如果“相同”则返回true,否则返回false。 
    hashcode()方法返回一个int数,在Object类中的默认实现是“将该对象的内部地址转换成一个整数返回”

    其中Equals和=区别:

    Equals可以比较引用类型,==既可以比较引用类型,也可以比较值类型;

    Equals 检查两个对象是否相等,对象的内容是否相等;==比较引用类型和基本类型时具有不同的够了能:

    比较值类型时候,检查数值是否相等,等返回True,否则False

    引用类型   如果引用指向同一对象(地址),返回True

  • 相关阅读:
    改变对象的字符串提示
    perl 和 python中的回调函数
    shiro权限验证标签
    user_tables 的信息依赖于统计信息
    centos jdk 1.7升级到1.8后显示还是1.7
    7.1 可接受任意数量参数的函数:
    IntelliJ IDEA中怎么查看文件中所有方法(类似eclipse里面的outline)
    Intellij IDEA 代码格式化与eclipse保持风格一致
    jquery-1.9.1.min.js:69 Uncaught TypeError: Illegal invocation
    python json模块
  • 原文地址:https://www.cnblogs.com/QQ931697811/p/4383471.html
Copyright © 2011-2022 走看看