zoukankan      html  css  js  c++  java
  • 初识散列及java中HashMap

          散列基础

          散列的主要目的是为了快速查找元素,传统的查找方法所用的主要操作都是比较关键字,如二分法,搜索树等,定位到一个元素要做很多次操作,费时费力.而散列可以通过散列函数把关键字直接定位到元素的位置,大大提高了查询效率.

       1 散列函数的选择,常用除余法,很少有完美的散列函数

       2 对关键字冲突的处理,常用开发地址发,链接法等

     

        java中的HashMap

        java中的HashMap采用了链接发,如图

             上面的Entry就是数组中的元素,它持有一个指向下一个元素的引用,这就构成了链表。 
             添加元素时,先根据key的hash值得到这个元素在数组中的位置,然后就可以把这个元素放到对应的位置中了。如果这个元素所在的位子上已经存放有其他元素了,那么在同一个位子上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。

             查找元素时,首先计算key的hashcode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的链表中找到需要的元素。

     判断两个对象是否相等

       1 判断两个对象的hashCode是否相等
       2 如果不相等,认为两个对象也不相等
       3 如果相等,则判断两个对象用equals运算是否相等
       4 如果不相等,认为两个对象也不相等
       5 如果相等,认为两个对象相等
    
    所以如果key是自定义的类,那么很可能得重载equals()和hashcode()两个方法

      1 hashcode的实现使hashmap里面的元素位置尽量的分布均匀些,主要是为了提高效率

      2 我们重点关注equals()方法,通常都是根据相应的业务逻辑来实现

     

  • 相关阅读:
    LinkList
    hadoop记录篇3-namenode水平拓展Federation+viewfs
    hadoop记录篇2-namenode高可用(HA)之QJM+NFS
    hadoop记录篇1-hdfs集群安装
    springcloud记录篇5-zuul路由
    springcloud记录篇4-断路器Circuit Breaker
    springcloud记录篇3-springcloud客户端ribbon和feign
    springboot心得笔记-常用配置
    springboot心得笔记-入门
    springcloud记录篇2-服务注册和发现
  • 原文地址:https://www.cnblogs.com/79home/p/2475872.html
Copyright © 2011-2022 走看看