用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。

JAVA Map的几种类型:
HashMap、HashTable、LinkedHashMap和TreeMap。

HashMap

HashMap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
遍历时,取得数据的顺序是完全随机的。
HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null
HashMap不支持线程的同步,是非线程安全的,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用 Collections和synchronizedMap方法使HashMap具有同步能力,或者使用ConcurrentHashMap。
Hashtable
Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:

它不允许记录的键或者值为空。
它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。
LinkedHashMap

LinkedHashMap 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和容量有关。

TreeMap

TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

区别

一般情况下,我们用的最多的是HashMap,HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map中插入、删除和定位元素,HashMap 是最好的选择。
TreeMap取出来的是排序后的键值对。但如果要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
LinkedHashMap是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 线性回归回归 缺失值 忽略_python – 使用scikit-learn(sklearn),如何处理线性回归的缺失数据?...

我的数据包含2个DataFrame. DataFrame_1.shape (40,5000)和DataFrame_2.shape (40,74).我正在尝试进行某种类型的线性回归,但DataFrame_2包含NaN缺失的数据值.当我DataFrame_2.dropna(how “any”)时,形状下降到(2,74).sklearn中是否存在可以处理NaN值的线性回归算法&#xff1…

vl_sift函数用法

1 I vl_impattern(roofs1) ; 2 image(I) ;3 %vl_sift函数的输入是一个单精度的灰度图像,灰度值区间归一化到[0, 255]。4 %因此图像 I 需要通过下面的函数转成相应的格式:5 I single(rgb2gray(I)) ;6 %vl_sift( )的输出矩阵 这里f是一个[x,y,s,th]的向量…

Java面试题之有没有有顺序的Map实现类,如果有,他们是怎么实现有序的?

Hashmap和Hashtable 都不是有序的。 TreeMap和LinkedHashmap都是有序的。(TreeMap默认是key升序,LinkedHashmap默认是数据插入顺序) TreeMap是基于比较器Comparator来实现有序的。 LinkedHashmap是基于链表来实现数据插入有序的。

Photoshop的批处理(有海量的数码照片,想传上网的话就看下)

每次狂按快门的结果就是得到海量的数码照片,想传上网的话,最起码也要做一些尺寸方面的处理,这么多照片,真的要一张一张处理吗?Photoshop自有好用的Action工具帮我们做批处理。 一、前期准备 在图片所在文件夹里添加一个…

Python基础-包

定义:包本质就是一个目录(必须带有一个__init__.py文件),它是用来从逻辑上组织模块导入包的本质:执行该包下的__init__.py文件导入当前目录下模块的一种方式:from . import module_name 其中.表示当前目录…

mysql试题错误记录字段_MySQL这三道常见的面试题,你有被问过吗?

据群友面试反馈,整理了3道MySQL面试题,对很多人可能是小菜一碟,对这些熟悉,有更好的理解的话,可以留言补充,不断完善我们的题库。MySQL查询字段区不区分大小写?MySQL innodb的事务与日志的实现方…

面试题,反射创建类实例的三种方式是什么

1、获得Class:主要有三种方法: (1)Object-->getClass (2)任何数据类型(包括基本的数据类型)都有一个“静态”的class属性 (3)通过class类的静态方法&am…

控制控制台

var s:string; begin AllocConsole; try Write(Type here your words and press Enter); Readln(s); ShowMessage(Format(You typed: "%s",[s])); finally FreeConsole; end; end;

推荐系统中的矩阵分解演变方式

推荐算法主要分为基于内容的算法和协同过滤. 协同过滤的两种基本方法是基于邻居的方法(基于内容/物品的协同过滤)和隐语义模型. 矩阵分解乃是实现隐语义模型的基石.矩阵分解依据用户对物品的评分, 判断出用户和物品的隐语义向量, 然后依据用户和物品的隐语义向量来进行推荐.推荐…

mysql1846错误_MySQL 错误代码:2003 idea错误:ERROR DruidDataSource:1846 - create connection error...

idea项目一启动就报错:20:01:13,047 ERROR DruidDataSource:1846 - create connection errorcom.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The…

mac刷新本地DNS缓存

本地连网有问题,刷新本地dns缓存,刷新DNS缓存命令 sudo killall -HUP mDNSResponder

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveUp/p/5709841.html ①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递…

Java中Class.forName和 ClassLoader.loadClass()区别

一、类加载过程 装载:通过累的全限定名获取二进制字节流,将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lang.class对象; 链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选…

变量在内存中的值[c][code]

#include <stdio.h>main() { /*%d所能输出的范围*/printf("%d \n", 0xffffffff); //%d所能输出的32位整数, 最大负整数printf("%d \n", 0x7fffffff); //%d所能输出的32位整数, 最大正整数/*单双精度浮点变量a,b,c,d在内存中的地址和内容 * …

Servlet 生命周期

Servlet 生命周期&#xff1a;Servlet 加载--->实例化--->服务--->销毁。init&#xff08;&#xff09;&#xff1a;在Servlet的生命周期中&#xff0c;仅执行一次init()方法。它是在服务器装入Servlet时执行的&#xff0c;负责初始化Servlet对象。可以配置服务器&…

java mysql防重复提交_防止数据重复提交的6种方法(超简单)!

有位朋友&#xff0c;某天突然问磊哥&#xff1a;在 Java 中&#xff0c;防止重复提交最简单的方案是什么&#xff1f;这句话中包含了两个关键信息&#xff0c;第一&#xff1a;防止重复提交&#xff1b;第二&#xff1a;最简单。于是磊哥问他&#xff0c;是单机环境还是分布式…

HttpRequest 类

关于此类的介绍&#xff1a;查看HttpRequest类 点击查看&#xff1a;HttpRequest中方法的封装 跟这个类对应的HttpResponse类 定义&#xff1a;使 ASP.NET 能够读取客户端在 Web 请求期间发送的 HTTP 值。 public sealed class HttpRequest 注&#xff1a;本篇主要介绍可以根据…

java中的HashSet内部是如何工作的

HashSet 的内部采用 HashMap来实现。由于 Map 需要 key 和 value&#xff0c;所以HashSet中所有 key 的都有一个默认 value。 类似于HashMap&#xff0c;HashSet 不允许重复的 key&#xff0c;只允许有一个null key&#xff0c;意思就是 HashSet 中只允许存储一个 null 对象。…

python字符串函数运算_Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 原创...

前面简单介绍了python基本运算&#xff0c;这里再来简单讲述一下Python字符串相关操作1. 字符串表示方法 >>> "www.jb51.net" #字符串使用单引号()或双引号(")表示www.jb51.net>>> www.jb51.netwww.jb51.net>>> "www."&qu…

自定义报表预览控制工具条

说明&#xff1a;原有的VFP的打印预览用多了感觉真的不是很方便&#xff0c;在某些特定的要求下&#xff0c;她就显得很笨拙&#xff0c;尤其那个打印工具条上的打印机按纽&#xff0c;一点就打印了&#xff0c;有时候我们需要在那个时候进行有选择性的打印而不是全盘的打出来&…