Java核心篇之HashMap–day6

HashMap是一种键值对的数据结构,以数组与链表的形式(key:value)实现,查询性能和添加性能很好。他是通过将key进行hashcode()映射函数来找到表中对应的位置。

HashMap和Hashtable与LinkedHashMap以及TreeMap的区别:

  1. 底层都是基于数组和链表来实现的;

  2. HashMap是非线程安全的,HashTable是线程安全的,修改数据的时候锁住整个Hashtable。

  3. HashMap的键和值都允许有null值存在,而HashTable则不行。

  4. HashMap效率比HashTable的要高。

  5. 初始值大小:
    Hashtable:size为11,扩容为:2size+1;
    HashMap:size为16,扩容为:2
    size(2的n次幂)

  6. Hashtable是基于synchronized关键字,锁住的是整个表,而concurrentHashMap是基于lock操作,这样的目的是保证同步的时候,锁住的不是整个对象。

  7. ConcurrentHashMap基于concurrentLevel划分出了多个Segment来对key-value进行存储,从而避免每次锁定整个数组,允许多个线程并发无阻塞的操作集合对象,尽可能地减少并发时的阻塞现象。

  8. 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相关推荐

  1. Java核心篇之Redis--day4

    Java核心篇之Redis–day4 Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有序集合SortedSet. 1.String:字符串,常用命令:get, ...

  2. Java核心篇之泛型--day5

    Java核心篇之泛型–day5 泛型是JDK5时引入的一个新特性,泛型提供了编译时类型安全检查的机制,该机制允许程序猿在编译时检测到非法的类型输入. 泛型的本质是参数化类型,也就是说操作的类型被指定为 ...

  3. Java核心篇之Java锁--day2

    Java核心篇之Java锁–day2 乐观锁:乐观锁是一种乐观思想,即认为读多写少,每次去取数据的时候都认为其他人不会修改,所以不会上锁:但是在更新的时候会判断一下在此期间别人有没有去修改它,如果有人 ...

  4. Java核心篇之JVM--day3

    Java核心篇之JVM--day3 Java JVM详解--通俗易懂教程 JVM:Java虚拟机的简称. 谈到JVM,通常会聊到三个问题: 1. 什么时候触发Java GC? 2. 对什么东西进行Ja ...

  5. Java集合篇:HashMap原理详解(JDK1.8)

    概述 JDK 1.8对HashMap进行了比较大的优化,底层实现由之前的"数组+链表"改为"数组+链表+红黑树",本文就HashMap的几个常用的重要方法和JD ...

  6. Java集合篇:HashMap原理详解(JDK1.7及之前的版本)

    (本文有关HashMap的源码都是基于JDK1.6的) 摘要: HashMap是Map族中最为常用的一种,也是 Java Collection Framework 的重要成员.本文首先给出了 Hash ...

  7. Java集合篇:HashMap 与 ConcurrentHashMap 原理总结

    一.HashMap原理总结: 1.什么是HashMap: (1)HashMap 是基于 Map 接口的非同步实现,线程不安全,是为了快速存取而设计的:它采用 key-value 键值对的形式存放元素( ...

  8. Java核心篇之多线程---day1

    Java面试之多线程-day1 一. 线程中sleep方法与wait方法有什么区别? 对于 sleep()方法,我们首先要知道该方法是属于 Thread 类中的.而 wait()方法,则是属于Obje ...

  9. 【面试】Java集合篇--图解HashMap的put方法的具体流程

最新文章

  1. MySQL root密码找回
  2. 初学者python编辑器-面向初学者的Python编辑器Mu
  3. 【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor 引入 | ProductFlavor 参考文档地址 )
  4. Redis configuration
  5. c++程序设计原理与实践_课程思政水资源系统优化原理与方法课程思政元素的探索...
  6. 手写自己的MyBatis框架-支持查询缓存
  7. P2P网络穿越 NAT穿越
  8. 微信小程序 调用地图接口,实现定位
  9. 太吾绘卷第一世攻略_建平中学高二数学周练卷(2020.09)
  10. USACO 简易题解(蒟蒻的题解)
  11. python可以做科学计算吗_python能做什么科学计算
  12. 使用WITH AS提高性能简化嵌套SQL
  13. react中将html字符串渲染到页面
  14. 【原创】VS2010 C++ Debug 出现 SXS: RtlCreateActivati...
  15. WinForm 界面美化
  16. ibm各种服务器visio图标vss文件,visio网络图标库vss大全
  17. LimeSurvey的使用和简单的二次开发
  18. 百度网盘断点续传下载工具IDM
  19. 微信小程序新手教程 1.0
  20. 时间复杂度和空间复杂度OvO

热门文章

  1. 【吐血整理】年度盘点 | 2019年Java面试题汇总篇——附答案
  2. MySQL 快速创建千万级测试数据
  3. pomelo获取客户端IP
  4. LINQ能不能用系列(二)LINQ to SQL 效率比对
  5. python使用python-barcode生成任意长度字符串的条形码(一维码)详细教程
  6. task2 EDA探索性数据分析
  7. linux中如何统计目录中的文件,[Linux目录文件]在Linux中统计目录内文件
  8. anaconda新建python2环境安装不了jupyterlab_在Mac下安装anaconda及配置jupyterLab和PyTorch的方法...
  9. rust石头墙几个c4_石头在景观中的运用
  10. mysql5.7安装教程centos_MySQL5.7版CentOS系统简易安装教程