zoukankan      html  css  js  c++  java
  • 集合:HashMap原理

    1、底层结构(数组、链表、红黑树)

    (1)底层结构:

     当桶的数量达到64,且链表的长度达到8时,链表结构将变为红黑树(jdk8)

    (2)红黑树

    解决链化(链表很长)问题,提高查找效率

    (3)hashmap扩容原理

    数组变长,链表变短(以空间换时间),提升查找效率

     (4)特点

    hashMap的初始容量(数组,即桶的个数)和加载因子会影响hashMap的性能,加载因子用于衡量哈希表的满的程度,因为桶太满的话查找的效率会降低,达到满的程度的时候就要扩容

     加载因子默认为0.75,数组长度的初始值为16

    2、map.put执行过程

    (1)执行过程

    (2)路由寻址:

     路由寻址公式:(table.length-1)&node.hash

    table.length:为2的n次方

    :3、put方法的返回值

    public class MyTest {
        public static void main(String[] args) throws IOException {
             HashMap<String,String> hashMap=new HashMap<>();
             hashMap.put("1","2");
             String value=hashMap.put("1","3");
             System.out.println(value);
        }
    }

    输出的结果是2不是3,执行的流程是3覆盖了2,但是返回的数值并不是新的值,而是以前的旧的value。

    4、执行流程

    (1)hashCode方法:

    public class MyTest {
        public static void main(String[] args) throws IOException {
             System.out.println("zhai".hashCode());
        }
    }
    3737558

    这个值是不能直接作为哈希表的下标的,因为哈希表的长度不会那么长。hash%table.length才是要查找的哈希表的下标

    (2)put操作:

  • 相关阅读:
    LC 774. Minimize Max Distance to Gas Station 【lock,hard】
    LC 272. Closest Binary Search Tree Value II 【lock,hard】
    LC 644. Maximum Average Subarray II 【lock,hard】
    Java --- JSP2新特性
    Java ---Listener监听器
    Java ---Filter过滤器
    Java ---自定义标签(二)
    Java ---自定义标签
    Java ---理解MVC架构
    Java--JDBC连接数据库(二)
  • 原文地址:https://www.cnblogs.com/zhai1997/p/12677798.html
Copyright © 2011-2022 走看看