java集合详解
什么是集合
集合是指具有某种特定性质的具体的或抽象的对象汇总而成的集体,有时集合也称之为容器,java中在util包下存放了所有的基本集合
集合的分类
集合大致分为List,Set,Map,Queue
List为一种有序可重复的接口集合
Set为一种无序不重复的接口集合
Map是采用键值对形式的接口集合
Queue 队列,先进先出
List
1.ArrayList:底层是数组,查询效率高
2.LinkedList:底层是双向链表,增删效率高
3.Vector:线程安全的,效率较慢因为他的方法大多采用synchronized进行修饰,也是采用Object数组进行存储
4.CopyOnWriteArrayList:适用于读和写多的并发场景
set
1.HashSet :使用HashMapkey实现
2.linkedHashSet:增删效率高
3.TreeSet:增删效率高,采用红黑树实现
4.CopyOnWriteArrayList:适用于读和写多的并发场景
Map
Map接口定义了键值对集合的基本方法,其中的存取方法(put,get)
Map的主要实现类有:HashMap与TreeMap,其中HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。
1.HashMap
在JDK8之前HshMap是采用数组加链表进行存储的
在JDK8之后HahMap是采用数组加链表加红黑树进行存储的
HahMap的默认参数为长度16与加载因子为0.75,而现在他的底层实际有两种数据结构一种是链表形式的一种为红黑树
当16个空间不足以存储(会判断元素数量是否大于HashMap的阈值如果大于则扩容)这时,就会调用resize ()方法通过加载因子扩容,最大是为1073741824个空间。
https://blog.csdn.net/weixin_43487853/article/details/129497402?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22129497402%22%2C%22source%22%3A%22weixin_43487853%22%7D
2.TreeMap
ArrayList 底层是数组形式,优点遍历快,插入删除慢
JDK1.7以后初始数组容量为0,在正真添加数据到数组中时,才会调用add方法并分配容量,按照1.5的比例去扩容,初始10个数组,当给到11时。就会扩容到15,,22等
jdk1.6中,误餐构造,初始容量为10,1.5倍去扩容