Java核心篇之HashMap--day6
Java核心篇之HashMap–day6
HashMap是一种键值对的数据结构,以数组与链表的形式(key:value)实现,查询性能和添加性能很好。他是通过将key进行hashcode()映射函数来找到表中对应的位置。
HashMap和Hashtable与LinkedHashMap以及TreeMap的区别:
底层都是基于数组和链表来实现的;
HashMap是非线程安全的,HashTable是线程安全的,修改数据的时候锁住整个Hashtable。
HashMap的键和值都允许有null值存在,而HashTable则不行。
HashMap效率比HashTable的要高。
初始值大小:
Hashtable:size为11,扩容为:2size+1;
HashMap:size为16,扩容为:2size(2的n次幂)Hashtable是基于synchronized关键字,锁住的是整个表,而concurrentHashMap是基于lock操作,这样的目的是保证同步的时候,锁住的不是整个对象。
ConcurrentHashMap基于concurrentLevel划分出了多个Segment来对key-value进行存储,从而避免每次锁定整个数组,允许多个线程并发无阻塞的操作集合对象,尽可能地减少并发时的阻塞现象。
LinkedHashMap:基本和HashMap实现类似,多了一个链表来维护元素插入的顺序,因此维护的效率会比HashMap略低。但是因为有链表的存在,遍历效率会高于HashMap。
LinkedHashMap和TreeMap
1.LinkedHashMap能够保持记录的插入顺序,用iterator来遍历LinkedHashMap时,先得到的记录是先插入的记录,它包含了HashMap的其他特性。
2.TreeMap能够将它保存的记录根据键进行排序,默认为升序。用iterator进行遍历的时候,得到的记录都是排好序的。其键和值都不能为空。
3.HashSet是根据HashMap来实现的,TreeSet是根据TreeMap来实现的,只不过set用的是map的key;map的key和set的共性就是集合的唯一性,其中TreeMap多了一个排序的功能。
HashSet,TreeSet,LinkedHashSet的区别;
1.HashSet类似于HashMap,至多只能有一个值为null,存入的元素是无序的,并且不能重复;
2.LinkedHashSet至多只能有一个值为null,元素严格按照放入的顺序排列
3.TreeSet不能有null值,根据元素的自然顺序进行排序
Java核心篇之HashMap--day6相关推荐
- Java核心篇之Redis--day4
Java核心篇之Redis–day4 Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet. 1.String:字符串,常用命令:get, ...
- Java核心篇之泛型--day5
Java核心篇之泛型–day5 泛型是JDK5时引入的一个新特性,泛型提供了编译时类型安全检查的机制,该机制允许程序猿在编译时检测到非法的类型输入. 泛型的本质是参数化类型,也就是说操作的类型被指定为 ...
- Java核心篇之Java锁--day2
Java核心篇之Java锁–day2 乐观锁:乐观锁是一种乐观思想,即认为读多写少,每次去取数据的时候都认为其他人不会修改,所以不会上锁:但是在更新的时候会判断一下在此期间别人有没有去修改它,如果有人 ...
- Java核心篇之JVM--day3
Java核心篇之JVM--day3 Java JVM详解--通俗易懂教程 JVM:Java虚拟机的简称. 谈到JVM,通常会聊到三个问题: 1. 什么时候触发Java GC? 2. 对什么东西进行Ja ...
- Java集合篇:HashMap原理详解(JDK1.8)
概述 JDK 1.8对HashMap进行了比较大的优化,底层实现由之前的"数组+链表"改为"数组+链表+红黑树",本文就HashMap的几个常用的重要方法和JD ...
- Java集合篇:HashMap原理详解(JDK1.7及之前的版本)
(本文有关HashMap的源码都是基于JDK1.6的) 摘要: HashMap是Map族中最为常用的一种,也是 Java Collection Framework 的重要成员.本文首先给出了 Hash ...
- Java集合篇:HashMap 与 ConcurrentHashMap 原理总结
一.HashMap原理总结: 1.什么是HashMap: (1)HashMap 是基于 Map 接口的非同步实现,线程不安全,是为了快速存取而设计的:它采用 key-value 键值对的形式存放元素( ...
- Java核心篇之多线程---day1
Java面试之多线程-day1 一. 线程中sleep方法与wait方法有什么区别? 对于 sleep()方法,我们首先要知道该方法是属于 Thread 类中的.而 wait()方法,则是属于Obje ...
- 【面试】Java集合篇--图解HashMap的put方法的具体流程
最新文章
- MySQL root密码找回
- 初学者python编辑器-面向初学者的Python编辑器Mu
- 【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor 引入 | ProductFlavor 参考文档地址 )
- Redis configuration
- c++程序设计原理与实践_课程思政水资源系统优化原理与方法课程思政元素的探索...
- 手写自己的MyBatis框架-支持查询缓存
- P2P网络穿越 NAT穿越
- 微信小程序 调用地图接口,实现定位
- 太吾绘卷第一世攻略_建平中学高二数学周练卷(2020.09)
- USACO 简易题解(蒟蒻的题解)
- python可以做科学计算吗_python能做什么科学计算
- 使用WITH AS提高性能简化嵌套SQL
- react中将html字符串渲染到页面
- 【原创】VS2010 C++ Debug 出现 SXS: RtlCreateActivati...
- WinForm 界面美化
- ibm各种服务器visio图标vss文件,visio网络图标库vss大全
- LimeSurvey的使用和简单的二次开发
- 百度网盘断点续传下载工具IDM
- 微信小程序新手教程 1.0
- 时间复杂度和空间复杂度OvO
热门文章
- 【吐血整理】年度盘点 | 2019年Java面试题汇总篇——附答案
- MySQL 快速创建千万级测试数据
- pomelo获取客户端IP
- LINQ能不能用系列(二)LINQ to SQL 效率比对
- python使用python-barcode生成任意长度字符串的条形码(一维码)详细教程
- task2 EDA探索性数据分析
- linux中如何统计目录中的文件,[Linux目录文件]在Linux中统计目录内文件
- anaconda新建python2环境安装不了jupyterlab_在Mac下安装anaconda及配置jupyterLab和PyTorch的方法...
- rust石头墙几个c4_石头在景观中的运用
- mysql5.7安装教程centos_MySQL5.7版CentOS系统简易安装教程