为什么hashmap线程不安全
在JAVA中Map和HashMap有什么区别
Map是存储键和值这样的双列数据集合,但存储的数据是没有顺序的,其键不能重复,但其值是可以重复的,可以通过每一个键找到每一个对应的值;Map是一个接口,HashMap和HashTable是都实现了Map接口的类 HashMap是基于hash的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中...
hashmap和concurrenthashmap的区别是什么?
最大的区别就是ConcurrentHashMap是线程安全的,hashMap不是线程安全的。基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此...
JAVA中的HASHSET和HASHMap的底层实现是怎样的?大致讲一下。
HASHMAP是根据HASH算法储存数据的集合类,每一个存入其中的对象都有一个特定的哈希值!当我们新建一个HashMap对象,如果不给定它的大小,其默认为16,就相当与下面新建了编号为0到15的数组(链表数组)。以默认HashMap为例,put一个对象时,首先得到他的哈希值,在与十五相除得到余数,找到与余数相同编号的数组插入其中!
hashmap底层实现原理是什么?
HashMap的实现原理:首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了。这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一...
在JAVA中Map和HashMap有什么区别
看看下面这个会更好 HashMap是Hashtable的轻量级实现(非线程安全 的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap 把Hashtable的contains方法去掉了,改成...
HashMap的底层数据结构以及主要参数
1.底层由链表+数组实现 2.可以存储null键和null值 3.线性不安全 4.初始容量为16,扩容每次都是2的n次幂(保证位运算) 5.加载因子为0.75,当Map中元素总数超过Entry数组的0.75,触发扩容操作. 6.并发情况下,HashMap进行put操作会引起...
Java中HashMap和TreeMap的区别
首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value这就是我们平时说的键值对。 HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使...
hashmap扩容原理是什么?
hashmap扩容原理是HashMap的方法是使用一个新的数组代替原有的数组。对原数组的所有数据进行重新计算插入新数组,之后指向新数组,如果扩容前数组已经达到最大了,那么将直接将阈值设置成最大整形return。hashmap扩容的特点 加载因子越大空间利用越高,扩容前填充的元素越多,put操作较快,但是链表容易过长...
Java中的HashMap的工作原理是什么?
一,存储方式: Java中的HashMap是以键值对(key-value)的形式存储元素的。二,调用原理: HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合\/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,...
java中的HashMap类是做什么用的?
java中HashMap类是用来存储具有键值对特征的数据。例如现在需要按照员工号来存储大量的员工信息,那么就可以使用HashMap,将员工号作为键,员工对象作为值来存储到HashMap中,其中使用HashMap时需要注意,HashMap是线程不同步的,多线程使用时,需要注意;并且HashMap允许null值作为键和值。
民丰县愈伤回答: 有2种办法让HashMap线程安全,分别如下:方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的. 这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现.方法二:重新改写了HashMap,具体的可以查看java.util.concurrent.ConcurrentHashMap. 这个方法比方法一有了很大的改进.
徒试18599977177问: hashmap为什么是线程不安全的 - ?
民丰县愈伤回答: HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点.对链表而言,新加入的节点会从头结点加入.javadoc中关于hashmap的一段描述如下:此实现不是同步的....
徒试18599977177问: hashmap为什么不是线程安全的 - ?
民丰县愈伤回答: 此实现不是同步的.如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须 保持外部同步.(结构上的修改是指添加或删除一个或多个映射关系的任何操作;仅改变与实例已经包含的键关联的值不是结构上的修改.)这一般通过对自然封装该映射的对象进行同步操作来完成.如果不存在这样的对象,则应该使用 Collections.synchronizedMap 方法来“包装”该映射.最好在创建时完成这一操作,以防止对映射进行意外的非同步访问,如下所示:
徒试18599977177问: 如何线程安全的使用HashMap - ?
民丰县愈伤回答: 在周二面试时,一面的面试官有问到HashMap是否是线程安全的,如何在线程安全的前提下使用HashMap,其实也就是HashMap,Hashtable,ConcurrentHashMap和synchronized Map的原理和区别.当时有些紧张只是简单说了下HashMap不是线...
徒试18599977177问: hashmap多线程为什么造成死循环 - ?
民丰县愈伤回答: 一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下可能出现问题? HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头
徒试18599977177问: java hashset为什么线程不安全 - ?
民丰县愈伤回答: 安全和效率的zd问题 table虽然线程安全, 但是效率底 我们很多时候不会考虑到多线程的问题, 所以正确的做法就是如果需要专属, 使用效率高的hashmap而同时自己去同步, 而不是为了少写点编码, 而不管需要不需要同步都去使用效率低的hashtable
徒试18599977177问: 请教高手Hashtable、HashMap、HashSet的用法与区别? - ?
民丰县愈伤回答: 他们的区别:HashTable和HashMap是Map接口的实现类,其中HashTable的键或值不能为null,HashMap的键或值可以为null;HashTable是线程安全的,HashMap是线程不安全的,因此HashMap的效率要比HashTable高.HashSet是Set接口的实现...
徒试18599977177问: hashmap 是线程安全的吗 - ?
民丰县愈伤回答: Hashtable. 1 HashMap不是线程安全的hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值.HashMap允许null key和null value,而hashtable不允许.2 HashTable...
徒试18599977177问: hashmap是线程安全还是不安全的 - ?
民丰县愈伤回答: String, Interger这样的wrapper类作为HashMap的键是再适合不过了,而且String最为常用.因为String是不可变的,也是final的,而且已经重写了equals()和hashCode()方法了.其他的wrapper类也有这个特点.不可变性是必要的,因为为了...
徒试18599977177问: 问一个问题,JDK自带的HashMap或者LinkedHashMap是线程安全的吗 - ?
民丰县愈伤回答: 老版的jdk中的map结合都是线程安全的,新的,JDK自带的HashMap或者LinkedHashMap是线程安全都是不安全的,需要自己去处理安全问题