最近为了整理数据结构的知识,系统地看了下Java中常用的数据结构,突然想到用动画画出数据流的过程。主要基于jdk8,部分特性可能与jdk7之前有所不同。比如LinkedListLinkedHashMap中的双向链表就不再是循环了。HashMap中的单链表是尾部插入,不是头部插入等,这些区别后面不再赘述,本文目录结构如下:LinkedList小编在这里建了一个前端学习交流按钮群:132667127,自己整理的最新前端资料和进阶开发教程,喜欢的可以进群一起学习交流经典双链表结构,适合乱序插入和删除。指定序列操作的性能不如ArrayList,这也是由它的数据结构决定的。add(E)/addLast(E)add(index,E)有个小优化,他会先判断index是靠近队头还是队尾来决定从哪个方向遍历链接。队列尾部的get(index)也会先判断index,但是性能还是不好,这也是为什么不推荐使用for(inti=0;i8进行了优化,我们会在另一个空间讲。put(K,V)put(K,V)相同的hash值resize动态扩容当map中的元素超过设定的阈值时,会进行resize(length*2)操作,扩容过程中,one-pass操作为对元素执行并放置在新位置。具体操作如下:直接rehash所有jdk7中的元素,放到新的位置。在jdk8中,判断元素原哈希值的新位是0还是1,0表示索引不变,1表示索引变为“原索引+oldTable.length”。LinkedHashMap继承自HashMap,在底层多维护一个双向链表来维护数据顺序。FIFO可以通过设置accessOrder(有序插入)或者LRU(有序访问)缓存来实现。当put(K,V)get(K)accessOrder为false时,直接返回元素即可,无需调整位置。当accessOrder为true时,最近的访问元素被放置在队列的末尾。removeEldestEntry删除最旧的元素