0
点赞
收藏
分享

微信扫一扫

Java基本集合List-Set-Map介绍

boom莎卡拉卡 2022-03-30 阅读 164
java

 List

元素有序,且可重复

遍历方法:1-for循环通过下标遍历 2-foreach遍历 3-使用迭代器遍历 4-使用lambda遍历

扩容:初始容量10,负载因子0.5,扩容增量0.5被 新容量=旧容量+旧容量*0.5或者新容量=旧容量*1.5

实现

ArrayList

1  简单数据结构,超出容量会自动扩容。所以在我们看来ArrayList的空间是无线大的,动态数据  2   内部实现是基于基础的对象数组                                                                                                    3   随机访问块                                                                                                                                    4   不适合随机的增加或者删除(因为ArrayList是一个对象数据,数据一旦要修改整个数据位置都会改动)                                                                                                                                          5  线程不安全(因为整个方法没有锁)

LinkedList

1  LinkedList额外提供了一些方法。比如addFirst 在集合最前面增加一组数据,addLast 在集合最后面增加一组数据,以及remove和insert方法等等                                                                            2  LinkedList可用作堆栈(stack)包括了push和pop方法  队列queue  或双向队列deque                3  以双向对象实现,所以能够很好的实现增加或者删除。链表无容量限制,允许元素为空              4  适合最随机的增加或者删除                                                                                                            5  线程不安全(方法里面没有锁)

 Vector

  线程安全(说白了在每个方法里面都加了锁)并行效率慢,不建议使用

CopyOnwiterArrayList

1  写时复制                                                                                                                                        2  线程安全                                                                                                                                      3  适合读多写少的场景(我查阅了很多数据,在数据很多的适合还是不适合写)                            4  写时复制一个新的数据,在这个新的数组里面完成增加或者修改删除,后将新数组赋值给旧数组。最终完成数据一致性                                                                                                                    5   比Vector性能高(虽然copyonwiterarraylist里面的方法也有所,但是它是写时赋值一个新的数组。在用户未完成新数组修改的方法后,其他用户还是访问的是旧数组。两边都不耽误)              6  最终一致性                                                                                                                                    7 继承了List接口,使用方法与ArrayList基本一致(你只要会用ArrayList就会copyonwiterarraylist)

Set

特点:无序,不重复

遍历:foreach,迭代器,下标,lambda表达式。基本与list一致

扩容:初始容量为16,负载因子0.75。扩容增加一倍

实现

HashSet

1  它存储唯一元素并允许空值,依据对象的hashcode来判断该元素是否存在                                  2  由HashMap支持                                                                                                                              3  不保存插入顺序                                                                                                                              4  非线程安全(方法也没有锁)

TreeSet

1  是一个有序的,且不包含重复的额元素的集合                                                                                2  作用是根据根据有序的Set集合,自然排序或者根据提供的Comparator进行排序                          3   TreeSet是基于TreeMap实现的

Map

特点:无序,键值对。键不可以重复,值可以重复。键如果重复则覆盖,没有继承Collection接口

扩容:初始容量16,负载因子0.75,扩容增量1倍

遍历:1-先获取所有键的Set集合,再遍历(通过键来获取值)2-取出保存好的Entry的Set,再遍历Set即可

实现

HashTable

线程安全,不太常用(用一把锁锁住所有,性能慢)

ConcurrentHashMap

线程安全,性能比HashTable高(因为是分段锁,而且还实现了cis接口)

TreeMap

1  Key值按一定的顺序排序                                                                                                                2  添加或者获取元素比ConcurrentHashMap慢。因为需要维护内部的红黑树,用于保证Key值的顺序

LinkedHashMap

继承HashMap

LinkedHashMap是有序的,而且默认为插入顺序(与你怎么写就怎么输出)但我们需要有序的存储Key或者value是就使用LinkedHashMap

举报

相关推荐

0 条评论