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()方法,通常都是根据相应的业务逻辑来实现

     

  • 相关阅读:
    tomcat:there is no resources that can be added or removed from server
    eclipse导入项目Archive for required library cannot be read or is not a valid ZIP file
    计时器StopWatch示例
    jar包依赖性查询
    如何通过一个类名找到它属于哪个jar包?
    项目中遇到的Integer问题--转
    java中的list时间排序
    java中hashMap的排序
    kafka源码分析之二客户端分析
    6-tips-for-managing-property-files-with-spring--转
  • 原文地址:https://www.cnblogs.com/79home/p/2475872.html
Copyright © 2011-2022 走看看