java集合框架
CLthinking
这个作者很懒,什么都没留下…
展开
-
JAVA集合框架7---ArrayDeque源码解析(源码基于JDK1.7)
上一篇我们分析了LinkedList的源码,知道LinkedList底层使用双向链表来组织数据,整个源码就是一些简单的双向链表的基本操作,比较简单,在分析LinkedList源码时,我们发现LinkedList实现了Deque(双向队列)接口,且在Deque接口内还包含了栈的操作方法(push、pop、peek)因此我们可以把LinkedList当做双向队列、队列和栈来使用。JDK中还提供了接口D...原创 2019-02-21 19:29:48 · 155 阅读 · 0 评论 -
JAVA集合框架13---LinkedHashMap源码解析
前面我们已经分析过了HashMap的源码, 我们已经知道了HashMap的底层的数据组织就是一个可变长的数组加一个单向链表来实现的,元素储存在hash表中的位置由其hash值和数组大小来确定,如果发生了hash冲突是使用拉链法(也就是单向链表)来解决的。因此HashMap里面储存的元素是无序的,但是有时候我们需要一个有序的集合,JDK提供的集合包中就提供了这样的类来满足我们的要求。它们分别是Tre...原创 2019-03-04 21:00:51 · 126 阅读 · 0 评论 -
JAVA集合框架14---LinkedHashSet源码解析
上一篇我们分析了LinkedHashMap的源码,发现其底层实现原理就是HashMap加一个双向链表来维持数据的插入顺序或者访问顺序,并且我们也谈到了,其底层的双向链表设计的十分巧妙,与hash表共用了key,value。像HashMap与HashSet的关系一样,与LinkedHashMap对应的是LinkedHashSet,它是一个集合,也可以维持插入顺序,但是不能维持访问顺序!下面我们直...原创 2019-03-05 20:00:36 · 162 阅读 · 0 评论 -
JAVA集合框架12---HashSet(JDK1.7)源码解析
上一篇我们分析了HashMap的源码,底层就是一个可变长数组+单向链表实现的,这篇我们接着分析一下HashSet的源码。HashSet是Set接口的一种实现方式,前面我们已经说过了,Set接口继承自Collection接口,但是Set接口并没有扩展任何方法,只是要求实现类保证Set集合内没有重复元素。在上一篇中我们知道HashMap中的key是唯一的,它不是正好满足了Set接口的要求吗。实际上Ha...原创 2019-02-26 14:08:33 · 183 阅读 · 0 评论 -
JAVA集合框架6---LinkedList源码解析
在上一篇中,我们分析了ArrayList的源码,我们知道ArrayList底层是使用数组来组织数据的,接下来我们将继续分析List接口的另外一个实现类:LinkedList。与ArrayList不同之处,LinkedList底层使用不带表头的双向链表来组织数据的,每个结点有三个域,分别为:储存数据的item域、指向下一个结点的next域以及指向前一个结点的prev域,下面是底层结点的源码:p...原创 2019-02-20 18:53:07 · 138 阅读 · 0 评论 -
JAVA集合框架11---HashMap(JDK1.7)源码解析
上一篇我们分析了Map接口以及AbstractMap提供的Map接口的默认实现,那么现在是时候揭开HashMap的神秘面纱了。HashMap只是Map接口的一种实现,Map接口比较知名的实现类还有TreeMap和LinkedHashMap,另外两个实现类我们后面在分析,现在主要看HashMap的底层源码实现。HashMap的主要特点就是它查询非常的高效,可以在O(1)时间内实现元素的查找、删除和插...原创 2019-02-25 20:57:31 · 172 阅读 · 0 评论 -
JAVA集合框架10---HashMap源码(JDK1.7)解析(前奏:HashMap的继承体系与定义)
与Collection接口那条主线一样,Map接口时Java集合框架里的另一条主线。Map描述的是键(key)值(value)对的映射,类似于一本英汉词典:key是英文单词,value是汉语意思,其中key不允许重复,value可以(词典中的单词不能重复,但是汉语意思可以重复,例如go和leave都有离开的意思)。与Collection接口一样,Map接口也定义了它的一些规范,下面我们来看Map接...原创 2019-02-25 18:54:56 · 121 阅读 · 0 评论 -
JAVA集合框架9---前面的集合框架总结
前面我们分析的集合框架都是基于Collection这条主线,Collection定义了一个集合接口,集合之间没有顺序和位置的概念,可以把Collection想象成一个背包,背包里面装着元素。Collection描述了一个数据集合应该具有的操作,比如最基本的增加一个元素:add(E e),删除一个元素:remove(Object o),以及返回集合元素的个数:size(),判断是否包含某个元素con...原创 2019-02-25 16:29:14 · 151 阅读 · 0 评论 -
JAVA集合框架5---ArrayList源码解析
ArrayList是一个动态数组容器,实现了List接口的所有方法,并且可以容纳null,和C++中的vector一样。底层用一个数组来组织数据,所有的方法都是围绕着这个数组进行的。除此之外,ArrayList还提供了两个公有API来对数组大小的操作,分别是trimToSize与ensureCapacity。ArrayList是我们平常使用比较多的一个集合类,掌握它的源码有助于我们更好的使用它。...原创 2019-02-19 22:10:18 · 191 阅读 · 0 评论 -
JAVA集合框架4---AbstractList源码解析
AbstractList类和List接口之间的关系与AbstractCollection类和Collection接口之间的关系一样,AbstractList提供了List接口的默认实现方式,这样如果我们需要实现List接口直接继承AbstractList类即可,而不需要实现List接口中的所有方法,加快开发。AbstractList的源码如下:public abstract class ...原创 2019-02-19 16:06:36 · 153 阅读 · 0 评论 -
JAVA集合框架3---List源码解析
柿子捡软的捏,接来下几篇会逐渐分析Java集合框架中最简单也是最常用的List集合源码。 List表示有顺序或位置的集合。调用者可以精确控制元素插入到集合中的位置,一般List的实现类都容许包含重复元素。 List是一个接口,扩展了Collection接口,下面看源码(以下代码只列举出了List接口扩展的方法,继承自Collection接口的方法...原创 2019-02-19 11:31:46 · 153 阅读 · 0 评论 -
JAVA集合框架2---AbstractCollection源码解析
上一篇文章中我们讨论了java集合框架的根接口Collection的源码,这一篇中我们接着分析AbstractCollection类的源码。从类名称AbstractCollection我们就可以看出两点:1,该类应该是个抽象类;2,该类应该与Collection类有着某种联系。实际上AbstractCollection类的确是个抽象类,它提供了Collection接口的默认实现,实...原创 2019-02-18 22:56:31 · 388 阅读 · 0 评论 -
JAVA集合框架1---Collection源码解析
Collection接口是JAVA集合框架中的根接口,也就是说在JAVA集合框架中所有的类都是Collection类的子类。但是有一点需要注意的是,在JDK中没有直接提供Collection类的实现类,而是提供了Collection更加具体的子接口的实现类,比如(Set接口与List接口)。 Collection表示一个数据集合,数据之间没有位置或顺序的概念。...原创 2019-02-18 20:21:46 · 443 阅读 · 0 评论 -
JAVA集合框架8---PriorityQueue源码解析
PriorityQueue是一个优先队列,它实现了Queue接口,前面几篇文章我们分析过LinkedList与ArrayDeque的源码,它们也都实现了Queue接口,PriorityQueue与它们的不同之处在于PriorityQueue里面保存的元素有优先级的概念,每一个元素都有一个优先级,队头元素的优先级最高的,如果从队头元素依次出队列,得到的将是一个有序的输出。PriorityQueue的...原创 2019-02-22 20:15:10 · 370 阅读 · 0 评论 -
请不要再说链表的插入删除的速度比数组快了
在上数据结构的课程时,相信老师在课堂上都是说链表的增加删除操作是O(1)的,这句话对也不对。这句话对的前提是我需要知道我们插入或者删除的前驱或者后继结点才行,不然这句话是不成立。相反我们还需要去遍历删除元素的前驱或者后继结点,这个过程是O(n)的,并其链表的遍历比数组慢!!!下面看我们的测试代码: public static void main(String[] args) { ...原创 2019-08-26 20:09:52 · 996 阅读 · 0 评论