---------------------------  剩下的时间不多了,抓紧做自己的事情

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 详细讲解的更多相关文章

  1. Android webservice的用法详细讲解

    Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...

  2. 数据结构与算法(九):AVL树详细讲解

    数据结构与算法(一):基础简介 数据结构与算法(二):基于数组的实现ArrayList源码彻底分析 数据结构与算法(三):基于链表的实现LinkedList源码彻底分析 数据结构与算法(四):基于哈希 ...

  3. 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架

    前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...

  4. head标签详细讲解

    head标签详细讲解 head位于html网页的头部,后前的标签,并以开始以结束的一html标签. Head标签位置如图: head标签示意图 head包含标签 meta,title,link,bas ...

  5. 详细讲解nodejs中使用socket的私聊的方式

    详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...

  6. iOS KVC详细讲解

    iOS KVC详细讲解 什么是KVC? KVC即NSKeyValueCoding,就是键-值编码的意思.一个非正式的 Protocol,是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取 ...

  7. Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...

  8. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. 详细讲解Android对自己的应用代码进行混淆加密防止反编译

    1.查看项目中有没有proguard.cfg. 2.如果没有那就看看这个文件中写的什么吧,看完后将他复制到你的项目中. -optimizationpasses 5 -dontusemixedcasec ...

随机推荐

  1. 快速部署 Spring PetClinic 到函数计算平台

    简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...

  2. javaweb项目部署到tomcat之后java文件没有编译

    1.选中你的项目==>选择Project 2.将Build Automatcally前的对号去掉后再Clean一下你的项目 这样就可以了,

  3. 【题解】Vijos1404 遭遇战(最短路图论套路)

    [题解]Vijos1404 遭遇战(最短路图论套路) 感觉一定要有建模的思想,不管什么东西要抽象建模之后再用算法解决... 求最短代价就可能可以用最短路,这句话不是强行解释,而是因为图论建模过后,可能 ...

  4. 洛谷P1720 月落乌啼算钱 题解 斐波那契数列/特征方程求解

    题目链接:https://www.luogu.com.cn/problem/P1720 题目描述: 给你一个公式 ,求对应的 \(F_n\) . 解题思路: 首先不难想象这是一个斐波那契数列,我们可以 ...

  5. PythonI/O进阶学习笔记_9.python的生成器

     content: 1. 什么是生成器 2. 生成器的实现 3. 生成器的应用   一.生成器简介 1.什么是生成器     在 Python 中,使用了 yield 的函数被称为生成器(genera ...

  6. 1029 旧键盘 (20 分)C、Java、python

    题目描述 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出 肯定坏掉的那些键. 输入描述: 输入在2行中分别给出应该输入的文 ...

  7. ### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: cn.xiaojian.blog.po.BlogType and java.lang.String ### Cause: java.lang.IllegalArgumentException: ...

    ### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: cn.xiaoj ...

  8. Ubuntu管理软件源

    在Ubuntu环境下,我们经常会使用apt-get(apt)命令下载各种软件,当所需软件在官方软件库中找不到时,我们需要添加第三方的软件源,或者由于位于海外的官方软件源下载速度过于感人时,需要添加国内 ...

  9. 阿里云ECS服务器Ubuntu配置MySQL远程访问

    root账户登录服务器Ubuntu16.04 apt-get update apt-get install mysql-server mysql-client; 安装时会让你设置root密码,输入2次 ...

  10. java小项目之:扫雷,这游戏没有你想的那么简单!

    扫雷 我之前分享的小项目和小游戏,电影购票.坦克大战.捕鱼达人.贪吃蛇等,虽然已经是耳熟能详人尽皆知的项目和游戏,但是保不齐真的有人没接触过. 今天分享的这个项目,我不相信没人接触过(仅限80后-00 ...