《码出高效:Java开发手册》学习笔记6

一、集合框架图
集合框架主要分为两类:第一类是按照单个存储的Collection,第二类是按照Key-Value存储的Map。
在这里插入图片描述
在集合框架图中,红色代表接口,蓝色代表抽象类,绿色代表并发包中的类,灰色代表早期线程安全的类。
1、List集合
在LIst集合中最常用的是ArrayList和LinkedList两个集合类。
ArrayList是容量可以改变的非线程安全集合。内部使用数组进行存储, 集合扩容时会创建更大的数组空间,把原有数据复制到新数组中。ArrayList支持对元素的随机访问,但是插入与删除时速度通常很慢。
LinkedList的本质是双向链表。与ArrayList相比,LInkedList的插入删除速度更快,但是随机访问速度很慢。 LinkedList除继承了AbstractList之外,还实现了Deque接口,这个接口同时具有栈和队列的性质。LinedList中有三个重要的成员:size,first,last。
2、Queue集合
Queue队列是一种先进先出的数据结构,它是一种线性表,只允许在表的一端进行获取操作,另一端进行插入操作。
3、Map集合
Map是以Key-Value键值对作为存储元素实现的哈希结构,Key是唯一的,Value则是可以重复的。在Map中可以使用keySet()查看所有的key,使用Values()查看所有value,使用entrySet()查看所有的键值对。HashMap是非线程安全的,ConcurrentHashMap是线程安全的,TreeMap的key是有序的。
4、Set集合
Set是不允许出现重复元素的集合类型,Set体系最常用的是HashSet,TreeSet,和LinkedHashSet。HashSet从源码分析是使用HashMap实现的,只是Value固定为一个静态对象。TreeSet则是通过TreeMap实现的。
二、集合的初始化
集合初始化通常进行分配容量,设置特定参数等相关工作。
首先是ArrayList的初始化,从源码说起。
在这里插入图片描述
在第一处中,正数带符号右移肯定是正值,所以oldCapacity+(oldCapacity>>1)结果可能超过int表示的最大值,反而有可能比参数的minCapacity更小,则返回值为size+1的minCapacity。
在ArrayList使用无参构造时,默认大小为10。后续在每次扩容的时候会调用Array.copyOf方法,创建新数组再复制。如果要将1000个元素放置在ArrayList中,则需要扩容13次,这样造成的性能损耗是非常大的。
而对于HashMap,有两个比较重要的参数,Capacity和LoadFactor,其中Capacity决定了存储容量的大小,默认为16,而LoadFactor决定了填充比例,一般使用默认的0.75。在HashMap中为了提高运算速度,设定HashMap的容量大小为2^n,在扩容时每次增加2倍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值