聊下java集合

作者: Java机械师 | 来源:发表于2019-03-12 17:05 被阅读1次

从整体说下集合

首先集合分为Collection、Map两大块, 前者每个位置只能保存一个元素,后者可以保存两个元素。

Collection又可分为List、Set、Queue

List下常用的有ArrayList、LinkedList、Vector、Stack

Set下常用的有HashSet、TreeSet

Queue又有Deque、Stack、LinkedList

看图更直观

Collection 继承体系

Map 继承体系

大的区别

提供这么多的集合类,总的来说也就是为了实现不同的功能,比如Set元素不能重复,List可以重复,Queue先进先出,不允许随机访问队列中的元素,Map含健值对,每个里面又可以再细分一些类可以排序,或支持并发等。

像LinkedList实现了List和Queue,既能作为先进先出队列,又能作为双端队列,还具备的能力。

LinkedHashSet继承HashSet,ArrayDeque实现Queue,用数组实现双端队列。

Stack 基于 Vector 实现。TreeSet 基于 TreeMap 实现,支持排序。

挑几个细说

HashMap

1.初始化. 默认16,如果指定容量的话,内部会自动调整为大于或等于指定容量的最小的一个2的倍数,比如指定10,会给16.

2.扩容. 非线程安全,扩容可能有并发问题,扩容会发生reHash,即会先将新的hash表设置为旧的hash表容量的2倍,再将旧的hash表的元素迁移过去,发生冲突时采用头插法形成链表,这样的设计思路是新数据默认更热,然后删除旧的hash表,再重新新建一个新的hash表以备下次使用。扩容可能产生链表环,jdk1.8之后有改进,改用尾插法加红黑树。

3.为什么容量得是2的倍数呢,因为是2的倍数时,我们查找一个元素时,hashCode%容量可以简化为一个与操作,h%length==h&(length-1),执行效率好,而且是2的倍数的话length-1二进制都为1,进行与操作得到的位置会比较均匀,发生hash碰撞的几率小。

Queue

Queue的使用一般用offer和poll,而不是add和remove,因为后者其实调用了前者,但是后者会在失败的时候抛出异常,这个在AbstractQueue里面体现的。还有put,take两种,放和取,当队列满或空的时候会阻塞。

TreeMap

这个map实现了SortedMap,默认对key升序排列,也可以自己指定规则,基于红黑树实现。

红黑数又是基于二叉查找树来的,因为二叉查找树有大长腿问题,所以在上面定义了一些红色节点、黑色节点和一些规则,在路径比较长的时候可以通过一定的旋转达到最长路径比较短的一个效果。保证最长路径不超过最短路径的2倍长。

LinkedHashMap

继承HashMap,但是它重新定义了Entry,在它的基础上加入before和after两个属性,所以它可以记录元素添加的顺序,默认可以按元素添加的顺序输出。而且当accessOrder属性初始化指定为ture的话也可以记录元素的访问顺序,即每次访问后会将被访问的元素移动到链表的尾部,这个特性就可以来做LRU缓存。

欢迎工作一到五年的Java程序员朋友们加入Java架构交流:810589193

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

相关文章

  • 聊下java集合

    从整体说下集合 首先集合分为Collection、Map两大块, 前者每个位置只能保存一个元素,后者可以保存两个元...

  • 聊下java集合

    从整体说下集合 首先集合分为Collection、Map两大块, 前者每个位置只能保存一个元素,后者可以保存两个元...

  • java 集合类之List(二)

    引言 昨天介绍了java集合类框架,接下来会详细聊一下各个集合类的适用场景和需要注意的地方。今天主要介绍一下...

  • Java集合框架 数据结构

    Java集合框架,数据结构 所有的集合类位于 jdk下的 rt.jar 包下java.util下; 1、所有集合类...

  • Java 集合框架

    Java 集合框架 ps:写这篇文章主要为了整理一下Java 的类集合框架,如有错误或不全,欢迎纠正 Java集合...

  • Java集合与并发集合

    画一下Java的集合collectionjava.util和并发集合java.util.concurrent的关系...

  • 一篇文章,全面解读Android面试知识点

    Java Java基础 Java集合框架 Java集合——ArrayList Java集合——LinkedList...

  • 收藏夹

    博文 Java 集合:Java 集合学习指南 Java 集合:Java 集合源码剖析 HashMap:HashMa...

  • Java 集合框架_开篇

    Java 集合框架系列 Java 集合框架_开篇Java 集合框架_ListJava 集合框架_ArrayList...

  • Java 集合框架_List

    Java 集合框架系列 Java 集合框架_开篇Java 集合框架_ListJava 集合框架_ArrayList...

网友评论

    本文标题:聊下java集合

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