一、AbstractCollection
提供了集合的最大实现
继承该类,必须实现size()和iterator(),因为该类操作集合都是通过iterator
二、fail-fast策略
该策略在集合框架中多次被应用
一种多线程对同一集合操作的保护措施,确保操作目标没有被其他线程操作过,与cas思想有异曲同工之处
具体在集合中的实现:
定义一个全局变量modCount,表示集合被修改的次数
每次进行动态操作的时候,modCount++
在Iterator中定义一个全局变量expectedModCount,
每次操作Iterator的时候都会比较modCount和expectedModCount,相等则认为这个集合没有被并发修改,否则会抛出ConcurrentModificationException
所以只要有modCount这个变量的,都是线程不安全的,这种集合最好使用迭代器,因为直接操作不会检查集合有没有被并发修改
使用volatile修饰modCount
被volatile修饰的变量,程序中的每次引用,处理器都会从内存(共享内存)中去读值,而不是从寄存器(线程独有内存)中获取
这使得fail-fast策略更可靠
三、AbstractList
提供了顺序表的最大实现
该类实现了迭代器
继承该类,需要实现get方法,因为迭代器的next是调用了get
四、ArrayList
1.初始容量为10
构造器(集合)和addAll,是深拷贝,因为调的是AbstractCollection.toArray()---->Arrays.copyOf()------>System.arraycopy()
2.多用会用trimToSize
因为顺序表一建立的时候,就会创建一个初始大小的数组,这样就会有空余的位置,调用这个方法可以把多余的位置清理,节约空间
实际长度是存储数组的length,不是全局变量size,size意味着有多个个元素是有数据的
3.扩展容量
默认是增大一半的空间,要考虑int溢出(溢出<0),以及虚拟机的最大内存
必用ensureCapacity(int minSize),需要增大容量的时候,都要调用
都要确认这个容量是否支持,不支持则会扩展容量
防止数组越界
4.toArray,clone都是深度拷贝
5.维护的数组是没有泛型的,当需要获取元素的时候,才去转型
6.对于动态操作
并没有像通常数据结构的书那样子,要移动操作元素后续的节点,而是直接拷贝一份
7.养成好习惯
动态操作了之后,不单单只是移动指针,要将不存在的元素位置设置为null,目的是为了让垃圾收集器工作
8.提供一些安全性低,但是快速的private方法
比如remove(Obj),获取下标了之后,就可以调用一个fastRemove(index),不需要二次比较值
9.subList(from,to)
返回的是该集合的视图,视图是浅拷贝,会直接操作该集合
查看原文:http://blog.zswlib.com/2016/10/26/jdk%e9%a1%ba%e5%ba%8f%e8%a1%a8%e7%ac%94%e8%ae%b0/
相关推荐
Java JDK 7学习笔记 PDF
良葛格java jdk 5.0学习笔记,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip。
JDK源码阅读笔记
Java JDK 6学习笔记.zipJava JDK 6学习笔记.zip Java JDK 6学习笔记.zip Java JDK 6学习笔记.zip
Java JDK 7学习笔记 此学习笔记适合初学者完成学习总结,加深理解 Java JDK 7学习笔记 此学习笔记适合初学者完成学习总结,加深理解
JDK源码阅读笔记
Java+JDK6学习笔记,PDF格式,压缩文件有2.1M。
Java JDK 5.0学习笔记 入门级别 新手必看
良葛格Java JDK 5.0学习笔记[可打印] 良葛格Java JDK 5.0学习笔记[可打印]
良葛格 Java JDK 5.0学习笔记,适合基础的同学看
Java JDK 6学习笔记_pdf版(附课本代码) Java JDK 6学习笔记_pdf版(附课本代码)
《Java JDK 6 学习笔记》配书示例 《Java JDK 6 学习笔记》配书示例
良葛格Java JDK 5.0学习笔记
《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新。并详细介绍了jvm、jre、java se api、jdk与ide之间的对照关系。必要时从java se api的源代码分析,...
《jdk8学习笔记》PPT+课后习题答案 林信良
JavaJDk7学习笔记
良葛格————JavaJDK5.0学良葛格————JavaJDK5.0学习笔记PDF.rar习笔记PDF.rar良葛格良葛格————JavaJDK5.0学习笔记PDF.rar————JavaJDK5.0学习笔记PDF.rar良葛格————JavaJDK5.0学习笔记PDF.rar良...
Java、JDK6、良葛、林信良、Java学习笔记 我没看到实体书,不知是否相同, 近些日学习一下ruby方面的,顺便看看java方面的, 这个是Java JDK6的学习笔记电子版, 压缩包里包含两个文件, 一个是chm格式(这个还行吧)...
包含 1 [书]JAVA学习笔记 2 [课件]Java+JDK6学习笔记.pdf 3 JavaGossip[良葛格]+kaminlee+.chm 4 [算法]java和c语言两种实现.rar
Java JDK 7学习笔记 写的还不错 完整扫描版