Java 集合
2019-01-18 12:18:09 0 举报
AI智能生成
Java 集合学习,面试,使用一篇就够
作者其他创作
大纲/内容
集合
Iterator
hasNext
next
remove
forEachRemaining
default方法,1.8以后支持
Listiterator
与Iterator的区别
适用于有序集合
Collection
fail-fast/fail-safe
多线程增加或者删除,会导致ConcurrentModificationException
List
ArrayList
动态扩容, 每次扩容是原来的1.5倍
扩容会创建一个新的数组对象
LinkedList
与ArrayList比较
CopyOnWriteArrayList
Vector和ArrayList
Set
HashSet
TreeSet
LinkedHashSet
CopyOnWriteArraySet
用CopyOnWriteArrayList实现的
EnumSet
Map
HashMap
Bucket,初始16
Hash冲突解决
链表
红黑树
JDK8当链表中的元素超过了 8 个以后,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。
hashcode的实现
与equals的关系
什么时候再散列,再散列是怎么进行的
扩容条件
存放新值的时候当前已有元素的个数必须大于等于阈值
存放新值的时候当前存放数据发生hash碰撞(当前key计算的hash值换算出来的数组下标位置已经存在值)
示例
会进行rehash
1.7
文章
头插法,重新计算bucket
1.8
尾插法,数据在原来的bucket或者加上扩容的长度
文一
1.7和1.8有哪些区别
扩容X2
一个面试题
capacity
当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。
loadFactor
负载因子,默认为 0.75。
threshold
扩容的阈值,等于 capacity * loadFactor
TreeMap
与HashMap比较
文一
LinkedHashMap
文章
ConcurrentHashMap
实现原理
EnumMap
文章
Dictionary
HashTable
Properties
与HashMap比较
WeakHashMap
文章
IdentityHashMap
Queue
BlockingQueue
方法
add
添加元素到队列里,添加成功返回true,由于容量满了添加失败会抛出IllegalStateException异常
offer
添加元素到队列里,添加成功返回true,添加失败返回false
put
添加元素到队列里,如果容量满了会阻塞直到容量不满
poll
删除队列头部元素,如果队列为空,返回null。否则返回元素。
remove
基于对象找到对应的元素,并删除。删除成功返回true,否则返回false
take
删除队列头部元素,如果队列为空,一直阻塞到队列有元素并删除
ArrayBlockingQueue
一个由数组结构组成的有界阻塞队列。
内部共享一个锁ReentrantLock
有两个Condition
实现生产者消费者模式
offer(e)
offer(e, time, unit)
put(e)
LinkedBlockingQueue
一个由链表结构组成的有界阻塞队列。
和ArrayBlockingQueue比较
读一个锁,写一个锁,在头部和尾部
PriorityBlockingQueue
一个支持优先级排序的无界阻塞队列。
LinkedBlockingDeque
一个由链表结构组成的双向阻塞队列。
DelayQueue
一个使用优先级队列实现的无界阻塞队列。
Delayed
SynchronousQueue
一个不存储元素的阻塞队列。
LinkedTransferQueue
一个由链表结构组成的无界阻塞队列。
Deque(双向链表)
LinkedList
集合都实现了Cloneable/Serializable
0 条评论
下一页