HashMap 详细讲解
--------------------------- 剩下的时间不多了,抓紧做自己的事情
1、HashMap 的实质
Hashmap = 数组 + 链表 + 红黑树 (jdk 1.8)
白话说: hashmap 是一个数组, 但是这个数组是一个链表的数组,即数组中的每一个元素存储的是个链表。
、 HashMap Put 存数据
(1) 当一个键值对存入的时候,先判断它应该在数组的哪个位置?
答: hashMap 是通过 对键值 进行hashcode, 取模,高位取值(这一些操作,可以自己去查查), 获取这个键值对应该存储的位置
(2)数组中的每一个元素都是 链表, 那么键值对是如何插入的?
答: 先遍历链表看有没有和相同的键值对,相同的就不需要进行数据存储
如何不同,则进行插入链表的头部。
(3)上面存储中存在一些问题!
数组中某一个链表过长后, 在查询过程的效率一定的较低的, 怎么处理的?
答: 在java 1.8 里面,引入的红黑树, 链表的长度大于8 的时候, 会将链表转化为 红黑树,利用红黑树
的查询速快的优点, 提高后期查询的速度
、 如何进行扩容
4、 Hashmap的缺点
hashMap 存放读取出的数据和存放数据的顺序是不一致的, 因为在存取的时候是按照键值K 的hashcode 进行存储的
所以在数组的位置不是按照顺序进行排序的。
但是你在遍历的时候, 获取的键的set 肯定是按照数组的顺序给你生成的, 所以无法按照原来的存入的顺序输出元素,
这个也不能是缺点,只能说是hashMap 的特质。
相对于hashmap的无法顺序读, linkedHashmap 可以解决这个问题, 因为它的内部存储是基于链表,进行存储的。
(个人感悟: 你自己看源码就会,发现这些问题,它本身的实现造成了它一定存在某种问题)
、 大佬的相关文件
https://tech.meituan.com/2016/06/24/java-hashmap.html (美团先关人员写的, 这个还可以)
HashMap 详细讲解的更多相关文章
- Android webservice的用法详细讲解
Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...
- 数据结构与算法(九):AVL树详细讲解
数据结构与算法(一):基础简介 数据结构与算法(二):基于数组的实现ArrayList源码彻底分析 数据结构与算法(三):基于链表的实现LinkedList源码彻底分析 数据结构与算法(四):基于哈希 ...
- 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...
- head标签详细讲解
head标签详细讲解 head位于html网页的头部,后前的标签,并以开始以结束的一html标签. Head标签位置如图: head标签示意图 head包含标签 meta,title,link,bas ...
- 详细讲解nodejs中使用socket的私聊的方式
详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...
- iOS KVC详细讲解
iOS KVC详细讲解 什么是KVC? KVC即NSKeyValueCoding,就是键-值编码的意思.一个非正式的 Protocol,是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取 ...
- Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...
- Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- 详细讲解Android对自己的应用代码进行混淆加密防止反编译
1.查看项目中有没有proguard.cfg. 2.如果没有那就看看这个文件中写的什么吧,看完后将他复制到你的项目中. -optimizationpasses 5 -dontusemixedcasec ...
随机推荐
- 22.json&pickle&shelve
转载:https://www.cnblogs.com/yuanchenqi/article/5732581.html json 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...
- mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?一步步解析
序言 在开始正文之前,首先解释Dao接口和XML文件里的SQL是如何一一对应的? 一句话讲完就是:mybatis 会先解析这些xml 文件,通过 xml 文件里面的命名空间 (namespace)跟d ...
- DRF 06
目录 视图家族 views视图类 mixin视图工具类 generics工具视图类 viewsets视图集 路由配置 视图家族 views视图类 APIView """ ...
- Ssh_key免秘钥登录
一,环境准备 1.1 操作系统 [root@manager ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [root@manager ~ ...
- 小白进阶之路-python与用户交互
在python3中input会将用户输入的任何内容都存成字符串类型.
- Spring超详细总结
Spring概述 一.简化Java开发 Spring为了降低Java开发的复杂性,采用了以下四种策略 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面和惯例进行声明 ...
- 【题解】284E. Coin Troubles(dp+图论建模)
[题解]284E. Coin Troubles(dp+图论建模) 题意就是要你跑一个完全背包,但是要求背包的方案中有个数相对大小的限制 考虑一个\(c_i<c_j\)的限制,就是一个\(c_i\ ...
- 洛谷$P1345\ [USACO5.4]$ 奶牛的电信$Telecowmunication$ 网络流
正解:最小割 解题报告: 传送门$QwQ$ $QwQ$好久没做网络流了来复健下. 这个一看就很最小割趴?考虑咋建图?就把点拆成边权为$1$的边,然后原有的边因为不能割所以边权为$inf$. 然后跑个最 ...
- Java程序运行原理
概念介绍: ![file](https://img2018.cnblogs.com/blog/1454321/202001/1454321-20200104145655999-149562495.jp ...
- 一次 kafka 消息堆积问题排查
收到某业务组的小伙伴发来的反馈,具体问题如下: 项目中某 kafka 消息组消费特别慢,有时候在 kafka-manager 控制台看到有些消费者已被踢出消费组. 从服务端日志看到如下信息: 该消费组 ...