美文网首页
JdK源码阅读-集合类

JdK源码阅读-集合类

作者: nyle | 来源:发表于2017-09-12 20:18 被阅读44次

Jdk源码阅读,把集合类的源码阅读了下,这里记下一些自己的理解;

ArrayList

使用数组存储数据;

    内部结构 transient Object[] elementData;

非线程安全
一些需要注意的函数

1. void trimToSize();
把elementData数组,变成只有size的大小数组;即当数组大小大于实际使用size的时候,把数组大小变小

2. void ensureCapacity(int minCapacity)
把数组扩容到可以支持minCapacity的大小;
默认扩大到 oldCapacity + oldCapacity << 1;即1.5倍
如果不够,则扩大到minCapacity

3.  <T> T[] toArray(T[] a)
如果a的size >= 数组的size,则返回的就是a;
不然返回的是一个新的Array

4. E set(int index, E element) 
set 对象的时候,会返回这个位置上的旧的元素 
add的时候不会
remove(index)的时候会返回

5. removeAll & retainAll(Collection<? extends E> c)
移除(保留)所有对象

6. ListIterator<E> listIterator(int index)
一个list的Iterator,可以返回next和preprevious的index
并且支持set 和 add

7. subList
ArrayList的sublist里维护一个parent,对subList操作,相当于对父对象操作;

8. modcount
通过这个来维护修改动作,如果arraylist操作过了,那之前放出去的Iterator,sublist都会失效

LinkedList

内部维护一个双向列表;

    transient LinkedList.Node<E> first;
    transient LinkedList.Node<E> last;   

然后就是实现了Queue接口;

HashMap

内部维护一个数组

transient Node<K,V>[] table;

放置一个对象时

  1. 对key进行hash,然后放置在对应的位置上;
  2. 这个时候如果冲突了,会在这个table[index]上相当于形成了一个列表;
  3. 当这个列表过长是会转变成一个红黑树;

当table的size超过阈值的时候
会把这个table的size翻倍,然后把数组的对象重新分配;

HashSet

内部就是维护了一个HashMap

HashTable

线程安全

和HashMap很像,对于单个操作实现了synchronized
但是不会变成红黑树

LinkedHashMap

继承自HashMap

会维护一个双向列表(根绝accessOrder 设定维护的是什么)
1. accessOrder true : 访问的时候,也会修改map的顺序
2. false : 插入顺序修改列表的顺序

遍历的时候,根据列表来遍历。所以这是有序的

Vector

实现了 线程安全的 ArrayList

总结图片

相关文章

  • JdK源码阅读-集合类

    Jdk源码阅读,把集合类的源码阅读了下,这里记下一些自己的理解; ArrayList 使用数组存储数据; 非线程安...

  • java集合类LinkList是数据结构链表的实现

    这次是自己阅读JDK源码得到的一些顿悟,java集合类LinkList是数据结构链表的实现。 LinkedList...

  • Java Collections.sort源码解析

    在jdk中提供了一个集合操作工具类Collections来操作集合。 ** 本文基于JDK7 源码进行分析 ** ...

  • WeakHashmap

    近日阅读 hadoop 源码时,经常就遇到一个集合 WeakHashmap,阅读源码,发现jdk1.2就出现了这个...

  • Java集合

    看过哪些 JDK 源码 集合框架,线程安全的,对比 用过哪些Java集合类,我直接画了集合关系图 说一下HashM...

  • Java集合类源码目录

    Java集合类源码的熟悉是很重要的,所以记录下自己看了jdk1.7版本下的java.util包的集合类源码的一些笔...

  • ListIterator的LinkedList实现

    源码来自jdk1.8 对于实现了List接口的集合类,他们的iterator都是通过实现ListIterator接...

  • 学习大纲计划

    1、java基础阶段: jdk源码:集合,nio,并发框架源码:mybatis,spring,springmvc,...

  • JDK源码阅读 0901 - 集合ArrayList

    不得不说,阅读源码前去参考一遍注释会让自己能有一个明确的思路,甚至明白一些自己写出的bug原因。ArrayList...

  • JDK源码阅读 0826 - 抽象集合

    我们经常在代码中使用到List 、Set 、 Map ,也粗略看过一些实现类的源码解析。现在去看下抽象类集合中的方...

网友评论

      本文标题:JdK源码阅读-集合类

      本文链接:https://www.haomeiwen.com/subject/wgrmjxtx.html