05 集合
Lamiaomiao
好好学习,天天向上
展开
-
08 集合总结
HashTable底层是数组+链表,初始容量是11,负载因子0.75,扩容2倍+1,头插法,采用的Entryint hash = key.hashCode();//object的hashcode方法// 为啥要把hash值和0x7FFFFFFF做一次按位与操作呢, // 主要是为了保证得到的index的第一位为0,也就是为了得到一个正数。 // 因为有符号数第一位0代表正数,1代表负数int index = (hash & 0x7FFFFFFF) % tab.length;.原创 2020-08-07 00:23:46 · 95 阅读 · 0 评论 -
07 Collection和Map结构
两大类:Collection,存储对象的集合;Map,存储键值对一. Collection1. SetTreeSet:基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如 HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 为 O(logN)。HashSet:基于哈希表实现,支持快速查找,不支持有序性操作。2. ListArrayList: 基于动态数组实现,支持随机访问。LinkedList: 基于双向链表实现,只能顺序访问,但是原创 2020-08-07 00:23:15 · 134 阅读 · 0 评论 -
06 红黑树 平衡二叉树
1. 什么是红黑树?红黑树是一种自平衡的二叉查找树:节点要么是黑色,要么是红色。根节点为黑色。叶子节点都是黑色的空节点。(叶子节点不存储数据)红色节点的左右孩子都是黑色。保证了从根节点到叶子节点不会出现连续两个红色节点。从任意节点到它每个叶子节点的所有路径,都包含相同数量的黑色节点。保证了没有一条路径会比其他路径长出两倍。时间复杂度为 logn ,含n个节点的红黑树高度最多为 2log(n+1) 。红黑树的左右旋: 左旋就是将这个旋转节点作为他右孩子的左孩子,原本他右孩子的左孩子作为原创 2020-08-07 00:22:43 · 135 阅读 · 0 评论 -
05 ArrayList LinkedList CopyOnWriteArrayList
1. ArrayList基于数组实现,实现了 List 接口。(允许传入空值和重复元素)当添加元素数量大于数组容量时,通过1.5倍的扩容机制进行扩容。实现了 RandomAccess 接口,表明它具有随机访问的能力,RandomAccess 接口里其实什么内容都没有,它只是一个标识,ArrayList 能实现随机访问真正依靠的是基于数组实现的底层结构。新增和删除操作会造成数组元素的移动,时间复杂度为 O(n)。由于支持随机访问,所以get和set操作的效率很高,时间复杂度为 O(1)。所以 Arr原创 2020-08-07 00:22:10 · 155 阅读 · 0 评论 -
04 LinkedHashMap TreeMap ConcurrentSkipListMap
1. LinkedHashMap如何实现有序访问? LinkedHashMap继承了HashMap,但比 hashMap 多维护了一个双向链表,它的内部Entry除了保存当前对象的引用外,还保存了before和after两个引用,从而在哈希表的基础上又构成了双向链表。这样就能按照插入的顺序遍历元素。LinkedHashMap可以用于实现 LRU 缓存。LRU手撕2. TreeMap TreeMap是基于红黑树实现的,时间复杂度是 logn,还可以保证键的有序性3. ConcurrentSkipL原创 2020-08-07 00:21:37 · 414 阅读 · 0 评论 -
03 ConcurrentHashMap
1. ConcurrentHashMap1.7和1.8版本实现原理JDK1.7分段锁:1.7中,ConcurrentHashMap是由一个Segment数组和多个HashEntry数组组成,Segment数组中每一个元素存储的是HashEntry数组和链表,当对HashEntry数组的数据进行修改时, 必须首先获得与它对应的Segment锁。多个线程可以同时访问不同的Segment,从而使并发度提高,并发度与 Segment 的数量相等JDK1.8Synchronized 和 CAS:1.8中,原创 2020-08-07 00:21:05 · 175 阅读 · 0 评论 -
02 HashMap
1. HashMap的底层数据结构HashMap底层是数组+链表+红黑树的结构,其中红黑树是JDK1.8加入的,数组中的每个位置存放的是节点,1.7中叫Entry,1.8中叫Node。每一个节点都会保存自身的hash值、key、value、以及next指针。在put操作时,将元素的key的hashCode 值的高16位和低16位异或得到key的 hash 值,然后将key的 hash 值和数组长度 length -1 的值进行与运算来得到元素所在桶的位置。如果出现冲突,即多个元素对应到一个桶,就采用拉原创 2020-08-07 00:20:35 · 296 阅读 · 0 评论 -
01 List、Map、Set HashSet
1. Java集合了解哪些?介绍一下有List、Map、Set三大类List可以有重复的元素,是有序的数据结构。实现类有ArrayList、LinkedList、CopyOnWriteArrayList、Vector等Map存储的是键值对,两个 key 可以引用相同的对象,但 key 不能重复。实现类有HashMap、HashTable、TreeMap、LinkedHashMap、ConcurrentHashMap等Set不能有重复的元素,是无序的数据结构。实现类有HashSet、TreeSet等原创 2020-08-07 00:19:28 · 100 阅读 · 0 评论