java集合框架
文章平均质量分 87
黑人小笼包
上海理工大学研究生
展开
-
Java集合框架之一-------集合框架概览及迭代
1.集合框架概览接口:List,Set,Queue, Deque, SortedSet接口:map2.迭代2.1 Iteratorpublic interface Iterator<E> {如果迭代具有更多的元素,则返回true 。 (换句话说,如果next()返回一个元素而不是抛出一个异常,则返回true ) boolean hasNext()...原创 2018-08-12 19:28:23 · 169 阅读 · 0 评论 -
Java集合框架之八----------WeakHashMap源码解析
1.技术点1.1 java中的引用引用类型主要分为4种:①强引用;②软引用;③弱引用;④虚引用。强引用就是永远不会回收掉被引用的对象,比如说我们代码中new出来的对象。软引用表示有用但是非必需的,如果系统内存资源紧张,可能就会被回收;弱引用表示非必需的对象,只能存活到下一次垃圾回收发生之前;虚引用是最弱的,这个引用无法操作对象。1.2引用队列ReferenceQueue ...原创 2018-08-30 10:42:38 · 196 阅读 · 0 评论 -
Java集合框架之十一-------------集合框架总结
1.collectin框架总览上图中,接口我用蓝色字体矩形框标示,抽象类用橙色椭圆形框标示,最终的实体类用红色六边形标示。另外,虚线标示实现(implements),实线标示继承(extends)。 Collection继承了Iterable接口,并且有Set,List,Queue,AbstractCollection子接口(一般不去重点解读)。2.Map框架Map接口...原创 2018-09-01 15:17:34 · 224 阅读 · 0 评论 -
Java集合框架之十二-------------集合框架执行流程(仅供复习使用)
首先介绍完上图,然后开始针对没集合框架类,进行执行过程的描述。1.为什么不使用实现Iterator,而使用Iterable?解:因为如果实现Iterator,必定要实现hasNext以及next方法,也就是必须得定义当前迭代器迭代到哪里的指针,假设为A,但是,如果该集合框架要作为一个方法参数进行传递的时候,到底指针A是指向当前位置,还是重新开始迭代,这会无法预知。因此,实现Iterab...原创 2018-09-04 10:51:07 · 413 阅读 · 0 评论 -
Java集合框架之七-------------PriorityQueue源码解析
1.总体介绍PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。优先队列,能保证每次取出的元素都是队列中权值最小的。元素大小的评判可以采用自然排序也可以通过传入的comparator比较器进行排序。Java中的PriorityQueue实现了Queue接口,不允许放入null元素,其通过堆实现,具体说是通过完全二叉树实现的小顶堆(任意一个非叶子节点的权值都不大于其左右节...原创 2018-08-29 14:45:02 · 776 阅读 · 0 评论 -
Java集合框架之五----------HashMap源码解析与HashSet源码分析 (四以后补上)
基于JDK1.8;1.概述Jdk1.8对hashmap进行了较大的优化,底层实现由之前的数组+链表,改为了数组+链表+红黑树,jdk1.8的hashmap的数据结构如下,当链表节点较少仍然以链表形式存在,当链表节点较多(大于8)会变为红黑树。注意点:①头结点指的是table表上索引位置的节点,就是链表头结点,即table数组上的元素存放头结点②根节点,红黑树最上面的节点,就...原创 2018-08-21 21:18:05 · 236 阅读 · 0 评论 -
Java集合框架之十-------------Hashtable源码解析
1.Hashtable与HashMap的区别 * Hashtable存储的内容是键值对(key-value)映射,其底层实现是一个Entry数组+链表; * Hashtable和HashMap一样也是散列表,存储元素也是键值对; * HashMap允许key和value都为null,而Hashtable都不能为null,Hashtable中的映射不是有序的; * ...原创 2018-08-31 19:11:31 · 173 阅读 · 0 评论 -
Java集合框架之九-------------Vector和Stack源码解析
1.Vector源码解析1.1.简介通过阅读源码发现Vector和ArrayList基本上是很相似的,只是Vector的增删改查方法上都加了synchronized关键字,所以是线程安全的,但是直接通过synchronized同步机制实现的线程安全会导致效率很低,所以基本上Vector很少被使用,下面就是Vector的增删改查方法和一起辅助方法的源码分析。1.2.成员变量 底...原创 2018-08-31 10:52:37 · 172 阅读 · 0 评论 -
Java集合框架之六----------LinkedHashMap和LinkedHashSet源码分析
1.LinkedHashMap源码分析1.1 概述LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMa...原创 2018-08-28 15:40:23 · 516 阅读 · 0 评论 -
Java集合框架之四--------TreeMap与TreeSet源码分析
1.1TreeMap源码分析使用TreeMap存储进行排序,要么自然排序,使用一些实现comparable接口的类的compareTo方法,要么自己定义比较机制,一种是user类去实现comparable接口,并实现compareTo方法,另一种是mycomparator写一个类去实现comparator接口实现compare方法,将mycomparator作为参数传入到treemap构造方法...原创 2018-08-27 15:21:18 · 223 阅读 · 0 评论 -
Java集合框架之四---------红黑树的性质及原理
1.原理介绍了解红黑树之前需要了解二叉查找树(二叉排序数)1.左子树上所有结点的值均小于或等于它的根结点的值。2.右子树上所有结点的值均大于或等于它的根结点的值。3.左、右子树也分别为二叉排序树。为什么要用红黑树?红黑树放弃了追求完全平衡,追求大致平衡,任何不平衡都会在3次旋转之内解决,平衡二叉树不行红黑树是一种近似平衡的二叉查找树,它能够确保任何一个节点的左右子树...原创 2018-08-27 14:15:23 · 461 阅读 · 0 评论 -
Java集合框架之三-------LinkedList源码解析
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable1.Node节点定义private static class Node&l...原创 2018-08-15 23:51:55 · 165 阅读 · 0 评论 -
Java集合框架之二-------ArrayLIst源码剖析
以jdk1.8为例,如其他版本有不同,暂不考虑//默认容量 private static final int DEFAULT_CAPACITY = 10;//共享空常量数组 private static final Object[] EMPTY_ELEMENTDATA = {};//共享空常量数组(与EMPTY_ELEMENTDATA的区别在于第一个元素被加进来的时候,...原创 2018-08-12 21:50:04 · 194 阅读 · 0 评论 -
Java集合框架之十三-------------HashMap的扩容与线程安全问题
HashMap扩容中,hash & oldCap的作用,观察扩容前和扩容后下标的变化原来的0101和10101在length=16的时候,通过hash&length-1的方法,计算出来都是0101;但是在扩容后即length=32时,hash&length -1 的方法计算出来为0101和10101;这就说明扩容后有些数据需要移动到原来index+oldcap的位置...原创 2018-09-16 11:24:49 · 1195 阅读 · 1 评论