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

  • 相关阅读:
    solr的安装
    数据导出/下载
    在realm中动态查询用户的权限&角色
    总结权限控制方式 ----------(2)
    shiro 权限过滤器 -------(1)
    NoSession问题
    hibernate中对象的3种状态----瞬时态、持久态、脱管态
    BaseAction 使用
    分页工具类 BaseAction
    2019-2020-1 20175316 《信息安全系统设计基础》第1-2周学习总结
  • 原文地址:https://www.cnblogs.com/QQ931697811/p/4383471.html
Copyright © 2011-2022 走看看