集合框架知识点整理List,Set,Queue,Map
集合框架分为Collection和Map.
Collection分为List(ArrayList,LinkedList),Set(HashSet,TreeSet),Queue
Map分为HashMap,TreeMap,HashTable,concurrentHashMap
collection
List:
1.底层数据结构:数组-固定顺序
2.有序集合,允许有重复值
ArrayList:
特点:
1.底层数据结构:数组-顺序结构
2.线程不安全,效率高
3.查询快,增删慢
4.允许有null值
LinkedList:
特点:
1.底层数据结构:双向链表
2.底层实现:节点(node)+next/pre(下一个节点的引用)
3.线程不安全,效率高
4.增删快,查询慢
5.允许有null值
Vector:
特点:
1.底层数据结构:数组-顺序结构
2.线程安全,效率低
3.查询快,增删慢
4.允许有null值
子类:
Stack
特点:
1.底层数据结构:基于链表
2.后进先出
小结:
ArrayList和Vector的区别:
1.同步性:ArrayList线程不同步,线程不安全 Vector线程同步,线程安全
2.扩容机制:ArrayList扩展为原容量的1.5倍 Vector扩展为元容量的2倍
ArrayList和LinkedList的区别:
1.LinkedList是双向链表,实现了List和Deque两个接口,而ArrayList是数组,只实现了List接口
2.对于随机访问,ArrayList优于LinkedList因为ArrayList有下标
3,。对于插入/删除,LinkedList会优于ArrayList,因为根据链表中的节点快速操作
Set:
特点:
1.Set是散列表-不连续,没有顺序
2.截取Map(映射表)
3.不允许有重复值
HashSet
特点:
1.底层数据结构:哈希表
2.内存存储位置由hashCode决定
3.是否允许重复:不允许,equals判断
4.存储顺序:无序
实现类:
LinkedHashSet 特点:
1.底层数据结构:哈希表+链表
2.插入是有序的,并且唯一
SortedSet:
实现类:TreeSet
特点:
1.底层数据结构:红黑树
2.作用:排序
3.有序,唯一
4.如何保证元素唯一?根据比较返回值是否为0来判断,返回的是0,即为相同,则不存
TreeSet,LinkedHashSet,HashSet的区别:
1.TreeSet主要功能:用于排序
2.LinkedHashSet主要功能:用于有序集合
3.HashSet主要功能:只是一个普通的存储数据容器
HashSet是如何保证元素不重复的?
1.TreeSet的底层是HashMap,并且把数据作为HashMap的key值
2.HashMap的key值特点:不允许重复
Queue
特点:
1.Queue集合是队列(线性结构)
2.进出顺序:先进先出
如何实现:通过链表/顺序实现
实现类:
Deque
特点:
1.Deque是双端队列
2.如何实现:顺序/链表
3.LinkedList除了是List的实现类,还是Deque的实现类
List和Set的区别
1.有序性:List按插入的顺序排序 Set存储顺序和插入顺序是不一致的
2.唯一性:List允许重复 Set不允许重复
3.获取元素:List是可以用下标索引直接操作元素 Set没有下标
如何选择集合?
1.需要唯一吗?
需要:Set 不需要:List
2.需要指定顺序吗?
需要:TreeSet
不需要:HashSet
和存储顺序一致:LinkedHashSet
3.需要频繁增加或者删除元素吗?
需要:LinkedList
不需要:ArrayList
Map
特点:
1.底层数据结构:哈希表
2.是以key-value的形式存入数据
3.key值不允许重复,value值允许重复
4.遍历方式:遍历键:KeySet() 遍历键值对:entrySet()
HashMap:
特点:
1.底层数据结构:哈希表 底层实现hash表配合使用的数组和链表
2.HashMap是无序的
3.HashMap是线程不安全,效率高
4.都允许有null值,但是key的null值只能有一个
5.如何保证键的唯一性:通过equals和hashcode判断
6.初识容量16 加载因子0.75 扩展为原容量的2倍,使用resize()方法扩容
子类:
LinkedHashMap
特点:
1.底层数据结构:哈希表+链表
2.是否有序:有序,安插入顺序排序
3.key和value都允许有null值
TreeMap
特点
1.底层数据结构:红黑树
2.有序,根据key排序
3.主要作用:排序
HashTable
特点:
1.底层数据结构:哈希表
2.无序
3.key和vaule都不允许null值
4.线程安全,效率低
concurrentHashMap
特点
1.底层实现
锁分离:在HashMap的基础上,将数据分段存储,concurrenhashmap由多个Segment组成,每个Segment都有把锁。Segment下包含很多Node,也就是我们的键值对了。
Segment数组+HashEntry数组 :Segment继承于重入锁,hashEntry是一个链式结构,则是用于存储键值对数据
2.作用:专门用于解决并发问题
什么是并发;cpu在同一时间内执行多个任务,-由多线程实现
3.线程安全,效率低
4.是否有序:无序
4.key 和value都不允许有null值
HashMap和HashTable的区别:
1.HashTable继承自Dictionary类,HashMap是Map接口的实现
2.HashMap是线程不安全的,HashTable是线程安全的
3.HahsMap的key和value都可以为null,key只能有一个null,而HashTable的key和value都不能为null
4.HashMap适合单线程,HashTable适合多线程
concurrentHashMap和hashTable的区别:
1.concurrentHashMap是结合了hashmap和hashtable两者的优势,hashmap没有考虑到同步的问题,而hashtable考虑到了同步问题。
2.hashtable每次执行的时候都要锁住整个结构,而concurrentHashMap只需要锁住一部分 即可。
HashMap和TreeMap的区别:
1.对于Map中插入,删除,定位的操作 选择HashMap
2.如果是要将一个有序集合进行遍历 选择TreeMap