首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JAVA源码走读(一) HashMapArrayList

HashMap 一、HashMap基本概念: HashMap是基于哈希表Map接口实现。此实现提供所有可选映射操作,并允许使用null值和null键。...HashMap不是线程安全,如果想要线程安全HashMap,可以通过Collections类静态方法synchronizedMap获得线程安全HashMap。...Map map = Connections.synchronized(new HashMap()); 二、HashMap数据结构 HashMap底层主要是基于数组和链表来实现,它之所以又相当快查询速度是因为它是通过计算散列码来决定存储位置...-1)方法来代替取模,同样实现了均匀散列,但效率要高很多,这也是HashMap对Hashtable一个改进。...ArrayList 一、首先是ArrayList继承体系: public class ArrayList extends AbstractList implements List,RandomAccess

50120
您找到你想要的搜索结果了吗?
是的
没有找到

Java容器类List、ArrayList、Vector及map、HashTable、HashMap区别与用法

Java容器类List、ArrayList、Vector及map、HashTable、HashMap区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储数据以便增加和插入元素...Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap...由Vector创建Iterator,虽然和ArrayList创建Iterator是同一接口,但是,因为Vector是同步,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector状态...Hashtable是同步HashMap类   HashMap和Hashtable类似,不同之处在于HashMap是非同步,并且允许null,即null value和null key。...,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap容量成比例。

1.4K80

hashmap线程不安全问题_arraylist线程不安全体现在哪里

一、头插法导致死循环 在jdk1.7以前,HashMap在进行扩容时采用是头插法,可能当时别人觉得这样比较高效,但是也带来了线程安全问题。...刚开始时HashMap是这样: 正常扩容后是这样: 但如果是在多线程下,两个线程指向3: 此时线程1比线程2先执行,那么线程1就会指向7,将线程7.next指向了3,...> threshold) resize(); afterNodeInsertion(evict); return null; } 这是HashMap...put方法,会出现线程不安全代码起源我已经标出。...三、线程安全字典 那么HashMap是线程不安全,我们在多线程场景下可以使用线程安全字典: 3.1Hashtable 这个类相当于是在主要方法前加了synchronized修饰,所以效率会非常低

27230

为什么hashmap线程不安全我们还要用_arraylist线程不安全体现在哪里

一、Map概述 我们都知道HashMap是线程不安全,但是HashMap使用频率在所有map中确实属于比较高。因为它可以满足我们大多数场景了。...HashMap根据keyhashCode值来保存value,需要注意是,HashMap不保证遍历顺序和插入顺序是一致。...LinkedHashMap属于HashMap子类,与HashMap区别在于LinkedHashMap保存了记录插入顺序。...二、HashMap实现 java7和java8在实现HashMap上有所区别,当然java8效率要更好一些,主要是java8HashMap在java7基础上增加了红黑树这种数据结构,使得在桶里面查找数据复杂度从...3、resize机制 HashMap扩容机制就是重新申请一个容量是当前2倍桶数组,然后将原先记录逐个重新映射到桶里面,然后将原先桶逐个置为null使得引用失效。

70031

深入理解Java中List、Set与Map集合

ArrayListArrayList实现了可变大小数组。它允许所有元素,包括null。ArrayList没有同步。 size,isEmpty,get,set方法运行时间为常数。...和LinkedList一样,ArrayList也是非同步(unsynchronized)。...由Vector创建Iterator,虽然和ArrayList创建 Iterator是同一接口,但是,因为Vector是同步,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector...hashmap遍历两种方式 HashMap遍历有两种常用方法,那就是使用keyset及entryset来进行遍历 方法一: Map map = new HashMap();  ...当容量已经达到最大可能值时,那么该方法就将容量调整到Integer.MAX_VALUE返回,这时,需要创建一张新表,将原表射到新表中。

84340

java-集合

Collection 和 Collections区别 ArrayList,Vector,LinkedList存储性能和特性是什么 ArrayList,LinkedList区别 HashMap和Hashtable...ConcurrentHashMap锁加在了哪些地方 HashMap容量为什么是2n次幂 ArrayList和LinkedList区别,并说明如果一直在list尾部添加元素,用哪种方式效率高 hashMap...,将已有对象传入另一个构造器中创建新对象来增强实现)。...实现Serializable序列化作用:将对象状态保存在存储媒体中以便可以在以后重写创建出完全相同副本;按值将对象从一个从一个应用程序域发向另一个应用程序域。...List:有顺序collection,并且可以包含重复元素。 Map:可以把键(key)映射到值(value)对象,键不能重复。

58810

【29期】Java集合框架 10 连问,你有被问过吗?

HashMap 不是线程安全 HashMap 是 map 接口实现类,是将键映射到对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。...4.ArrayList 和 LinkedList 区别是什么? ArrayList是实现了基于动态数组数据结构,LinkedList基于链表数据结构。...PS:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全问题,记住Vector与Hashtable是旧,是java一诞生就提供了,它们是线程安全ArrayList...ArrayList与Vector都可以设置初始空间大小,Vector还可以设置增长空间大小,而ArrayList没有提供设置增长空间方法。...即Vector增长原来一倍,ArrayList增加原来0.5倍。 6.Array 和 ArrayList 有何区别?

57330

Java基础笔记18

18.01_集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到对象 一个映射不能包含重复键 每个键最多只能映射到一个值 B:Map接口和Collection...) A:画图演示 Map集合遍历两种方式比较 18.06_集合框架(HashMap集合键是Student值是String案例) A:案例演示 HashMap集合键是Student值是String...嵌套HashMap) A:案例演示 集合嵌套之HashMap嵌套HashMap 18.13_集合框架(HashMap和Hashtable区别) A:面试题 HashMap和Hashtable区别...Hashtable是JDK1.0版本出现,是线程安全,效率低,HashMap是JDK1.2版本出现,是线程不安全,效率高 Hashtable不可以存储null键和null值,HashMap可以存储... hm = new HashMap(); //存储索引和扑克牌 ArrayList list = new ArrayList

65870

阶段01Java基础day18集合框架04

18.01_集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到对象 一个映射不能包含重复键 每个键最多只能映射到一个值 B:Map接口和Collection...) A:画图演示 Map集合遍历两种方式比较 18.06_集合框架(HashMap集合键是Student值是String案例) A:案例演示 HashMap集合键是Student值是String...嵌套HashMap) A:案例演示 集合嵌套之HashMap嵌套HashMap 18.13_集合框架(HashMap和Hashtable区别) A:面试题 HashMap和Hashtable区别...Hashtable是JDK1.0版本出现,是线程安全,效率低,HashMap是JDK1.2版本出现,是线程不安全,效率高 Hashtable不可以存储null键和null值,HashMap可以存储... hm = new HashMap(); //存储索引和扑克牌 ArrayList list = new ArrayList

50920

JAVA面试集合那些问题你都会吗?

你可以通过它索引来访问任何元素。List更像长度动态变换数组。 Map是一个将key映射到value对象.一个Map不能包含重复key:每个key最多只能映射一个value。...快速失败:当你在迭代一个集合时候,如果有另一个线程正在修改你正在访问那个集合时,就会抛出一个ConcurrentModification异常。 在java.util包下都是快速失败。...基于你collection大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key遍历。 15.ArrayList和Vector有何异同点?...以下是ArrayList和Vector不同点。 (1)Vector是同步,而ArrayList不是。...Array可以容纳基本类型和对象,而ArrayList只能容纳对象。 Array是指定大小,而ArrayList大小是固定

75030

奇怪,为什么ArrayList初始化容量大小为10?

我们都知道ArrayListHashMap底层都是基于数组,但为什么ArrayList不像用HashMap那样用16作为初始容量大小,而是采用10呢?...为什么HashMap初始化容量为16? 在聊ArrayList初始化容量时,要先来回顾一下HashMap初始化容量。...有一点我们需要知道HashMap计算Key值坐标的算法,也就是通过对Key值进行Hash,进而映射到数组中坐标。...首先,在讨论HashMap时候,我们说到HashMap之所以选择2n次方,更多是考虑到hash算法性能与碰撞等问题。这个问题对于ArrayList来说并不存在。...但在寻找原因和答案过程中,还是能够学到很多,成长很多。没有对比就没有伤害,比如HashMapArrayList对比,没有对比就不知道是否适合,还比如HashMapArrayList

99220

Java 容器:一、认识容器

下图是QueueJDK源码UML图。 三、Map层次结构 下面的图是Map层次结构图 Map: 是一个键值对集合。也就是说,一个映射不能包含重复键,每个键最多映射到一个值。...四、容器接口小结 五、代码样例 对HashMap,HashSet,LinkedList,ArrayList,TreeMap,TreeSet例子如下: import java.util.ArrayList...HashMap中元素排列顺序是不固定)。...hashtable与hashmap 1、历史原因:Hashtable是基于陈旧Dictionary类HashMap是Java 1.2引进Map接口一个实现 。...2、同步性:Hashtable是线程安全,也就是说是同步,而HashMap是线程序不安全,不是同步 。 3、值:只有HashMap可以让你将空值作为一个表条目的key或value 。

57340
领券