JDK源码
文章平均质量分 84
changer328
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CopyOnWriteArrayList源码阅读
1. CopyOnWriteArrayList的迭代器保留一个执行底层基础数组的引用,这个数组当前位于迭代器的起始位置,由于基础数组不会被修改(修改都是复制一个新的数组),因此对其同步只需要保证数组内容的可见性。多个线程可以同时对这个容器进行迭代,而不会彼此干扰或者与修改容器的线程互相干扰。不会抛出CocurrentModificationException,并且返回元素与创建迭代器创建时的元素完全一致,不必考虑之后修改操作带来影响。2. 每次修改容器都会复制底层数组,这需要一定开销,特别是容器规模较大。原创 2014-11-02 19:47:42 · 866 阅读 · 0 评论 -
ArrayList源码阅读
ArrayList实现继承关系java.lang.Object - java.util.AbstractCollection - java.util.AbstractList - java.util.ArrayList实现接口Serializable, Cloneable, Iterable, C原创 2014-10-30 16:10:53 · 879 阅读 · 0 评论 -
EnumMap源码阅读
EnumMap的键值必须是Enum类型,而且put的时候只能是初始化时指定的Enum或者其子类型。同时不支持键值为null。EnumMap初始化会创建存放key和value的两个数组,大小为Enum类型中成员数量,同时会缓存所有Enum类型到key数组。EnumMap迭代保持键值的自然顺序(即枚举类型常量声明的顺序),其实通过Enum内部ordinal()方法实现,vals数组每次插入元素都放插入到key值对应的ordinal()返回的位置。原创 2014-11-19 20:21:35 · 1049 阅读 · 0 评论 -
HashMap源码阅读
HashMap本身是一个有数组和链表组成的数据结构,其插入和查找元素的消耗可以看成O(1)。默认散列表内部数组大小保证为2的幂次,由于内部采用了位运算代替了传统取模运算来确定元素插入位置。HashMap性能由散列表的容量和装填因子两部分决定,其中装填因子默认是0.75,容量默认是16。Map是独立接口,并非Collection子接口,但是提供三个集合类视图:键集合、值集合、键值对集合。分别对应keySet()、values()、entrySet()三个方法的返回值,这三个集合视图是无状态的,本身依赖Ma原创 2014-11-05 17:38:06 · 950 阅读 · 0 评论 -
LinkedList源码阅读
LinkedList实现了List和Deque接口,其中Deque是一个双端队列,可以在头部和尾部两端添加和删除元素,因此LinkedList既可以当作先进先出的队列,也可以当作后进先出的栈。LinkedList采用双向链表方式实现,因此插入、删除元素效率比较高,但不支持随机访问。多线程环境下LinkedList不能保证线程安全,因此对其结构修改的操作应当程序员来保证线程安全,其迭代器支持fail-fast,迭代过程中试图发现是否发生修改,若修改了容器则抛出ConcurrentModificationE原创 2014-11-04 20:06:40 · 791 阅读 · 0 评论 -
LinkedHashMap源码阅读
LinkedHashMap继承自HashMap,相关基本操作性能略低于HashMap,由于需要额外代价维护链表。其遍历操作是通过操作该双向链表实现,而非内部散列表数组,因此性能为O(size)比HashMapO(capacity)更高。支持两种顺序遍历:元素插入顺序(重复put不算)和最近使用优先顺序(调用put和get类似LRU),默认是按照元素插入顺序遍历。通过构造函数传入true可以实现最近使用优先遍历,每次put或get操作时,将该元素直接重新放置到链表头结点后面来实现最近使用优先遍历。Link原创 2014-11-06 19:19:37 · 1084 阅读 · 0 评论 -
IdentityHashMap和WeakHashMap源码阅读
当比较key和value的时候,IdentityHashMap利用引用相等(==)来代替普通Map利用值相等(equals)。即IdentityHashMap中两个键值k1和k2当k1==k2则认为相等,普通map对象只有(k1==null ? k2==null : k1.equals(k2))才认为相等。 WeakHashMap将键存储在WeakReference中,就是说,如果没有强引用指向键对象的话,这些键就可以被垃圾回收线程回收。值被保存在强引用中。因此,你要确保没有引用从值指向键或者将值也保存在原创 2014-12-04 15:51:37 · 735 阅读 · 0 评论
分享