Java基础学习总结(152)——JDK 1.7和 JDK 1.8中HashMap的实现有什么不同?
一、初窥HashMap
HashMap是应用更广泛的哈希表
实现,而且大部分情况下,都能在常数时间性能的情况下进行put和get操作。要掌握HashMap,主要从如下几点来把握:
- jdk1.7中底层是由数组(也有叫做“位桶”的)+链表实现;jdk1.8中底层是由数组+链表/红黑树实现
- 可以存储null键和null值,线程不安全。在HashMap中,null可以作为键,这样的键只有一个,但可以有一个或多个键所对应的值为null。
当get()方法返回null值时,即可以表示HashMap中没有该key,也可以表示该key所对应的value为null
。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个key,应该用containsKey()
方法来判断。而在Hashtable中,无论是key还是value都不能为null。 - 初始size为16,扩容:newsize = oldsize*2,
size一定为2的n次幂
- 扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入
- 插入元素后才判断该不该扩容,有可能无效扩容(插入后如果扩容,如果没有再次插入,就会产生无效扩容)
- 当Map中元素总数超过Entry数组的75%,触发扩容操作,为了减少链表长度,元素分配更均匀
- 1.7中是先扩容后插入
Java基础学习总结(152)——JDK 1.7和 JDK 1.8中HashMap的实现有什么不同?相关推荐
- Java基础学习总结(157)——国产开源JDK来了
简介 Alibaba Dragonwell 是一款免费的, 生产就绪型Open JDK 发行版,提供长期支持,包括性能增强和安全修复.阿里巴巴拥有最丰富的Java应用场景,覆盖电商,金融,物流等众多领 ...
- JAVA基础学习预科部分 (Markdown + dox)2021/2/22持续更新中
javaSE从 2021/02/22开始,预计到2021/02/28,原本预计的算法题解先鸽一下. -博客Blog的重要性 & Markdown语法 基础markdown语法 标题, 直接使用 ...
- 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结
Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...
- 尚学堂JAVA基础学习笔记_2/2
尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...
- Java基础学习Day09--字符串
Java基础学习Day09--字符串 一.简介: 二.String类字符串 三.String字符串的存储原理 四.字符串常用方法 1.equals()方法 2.字符串的搜索 3.截取子字符串 4.去除 ...
- Java 基础学习-Java语言概述
Java 基础学习 第一章 Java语言概述 回顾java基础知识,进行整理记录. 文章目录 Java 基础学习 前言 一. Java语言发展史(了解) 二.Java语言跨平台原理(理解) 三.JRE ...
- Java基础学习——第十章 枚举类注解
Java基础学习--第十章 枚举类&注解 一.枚举类(enum) 1. 枚举类的概念 枚举类:类的对象只有有限个,确定的 线程状态:创建.就绪.运行.阻塞.死亡 当需要定义一组常量时,强烈建议 ...
- java基础学习-4
Java基础学习-4 static 注意事项 重新认识main方法 继承 小练习 子类到底能继承父类中的哪些内容(第126集)*** 继承过程中成员变量和成员方法的访问特点 小练习 小总结 构造方法的 ...
- java基础学习-6
Java基础学习-6 双列集合 Map的常见API Map的遍历方式 HashMap 小练习 LinkedHashMap TreeMap TreeMap--小练习1 TreeMap--小练习2 Tre ...
- java基础学习整理(一)
java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...
最新文章
- 勤于思考:从客户端中检测到有潜在危险的 Request.Form 值
- P1067 多项式输出(模拟)
- 能不做自己写个类,也叫java.lang.String
- linux 查看防火墙状态_每天五分钟学习Linux系列之 - 系统安全配置
- LeetCode 107. Binary Tree Level Order Traversal II
- 大数据分析过程中包含哪些技术
- 锁屏界面提示某些设置已隐藏_OPPO手机忘记锁屏密码怎么办?教你一招轻松解开!...
- SSM-SpringMVC-15:SpringMVC中小论注解式开发之通配符篇
- IEEE的论文哪里可以下载?
- 记录一下Material Dialogs的使用
- 小程序 多线程Worker(类似h5的webWorker)
- 哥德巴赫猜想 php,哥德巴赫猜想的程序验证
- 《聪明的投资者》摘要——价值投资的起点
- List Set Map
- MYSQL环境搭建(windows)
- Java(一)——环境配置及相关软件的安装
- 跨境电商卖家发货形式多样,亚马逊卖家如何选择?
- 开发一个导出功能,将echarts图表导出到excel文件中
- 尼甘布 小渔村的惬意生活
- uniapp 微信小程序版本更新提示
热门文章
- LeetCode-70 爬楼梯
- linux切换至root权限,【linux】sudo su切换到root权限
- 伺服驱动器cn1引脚定义_英威腾伺服
- vue cli脚手架详解_vue-cli脚手架搭建vue项目搭建
- 三维重构 c++_桐柏3d打印模型生产厂家【博通三维】-博通三维
- python雷达图怎么做_使用Python绘制雷达图
- ecs云服务器 系统登陆密码,云服务器ecs系统登录密码
- python中函数包括标准库函数吗_Python标准库:内置函数divmod(a, b)
- kafka 的pom文件_Flink 消费 Kafka 数据
- python knnmatch_opencv python 特征匹配