Map 和 Set关系

Map和Set事实基础的朋友,有着千丝万缕的联系。

Map它可以被看作是Set延期。从何时起Set内容存储在key-value的值当表单。这个Set实际上可以作为Map使用。反过来,Map事实上,有一个Map.Entry内部接口。而Map在存放值对时,全然不考虑value,而仅仅考虑key,因此Map也能够看成是一个存key的Set,而value仅仅是key的附属物。

HashMap加入元素时,依据key的hashCode进行再哈希计算得到值来决定存放位置。HashMap底层有个数组Entry[],依据hash值来决定key-value存在数组的哪个元素,而Entry[]实际上是一个table。

HashSet底层是居于HashMap来实现的。HashSet底层用HashMap来保存全部元素,这些元素作为HashMap的key,而相应的Value是一个名为PRESENT的static final的Object对象。对HashSet操作的方法都调用HashMap的方法进行操作。

元素是否反复,要同一时候推断元素对象的hashCode()和equals(),hashCode相等且equals返还true时才觉得是反复元素,不进行替换。

TreeSet和TreeMap的关系也是非常相似的,即TreeSet底层是採用TreeMap存储的。TreeMap採用红黑树的排序二叉树来保存Map中的每一个Entry(树节点)。

List的三个实现:ArrayList,Vector和LinkedList。

Vector还有个儿子Stack,Stack不过在Vector的基础上加入了5个方法,只五个方法的代码就将Vector变成了Stack,Stack依旧是一个Vector,它继承了Vector的synchronized血统,都是线程安全的。从JDK1.6開始,Java提供了Deque接口并提供了实现类ArrayDeque,即使程序中须要栈这种数据结构,也不推荐使用Stack而推荐使用Deque。除非要求线程安全。

Deque是双端队列。是队列但同一时候拥有栈的功能。底层都是数组实现。

Vector差点儿被ArrayList取代了,它唯一的优点是线程安全。

如今甚至为了线程安全也不用Vector了。能够通过Collections工具类的synchronizedList()方法将一个普通的ArrayList包装成线程安全的ArrayList。

ArrayList 和LinkedList

ArrayList底层是基于数组实现的。所以ArrayList创建的时候有个初始的capacity,提供了构造方法,编程者能够在创建ArrayList时指定初始的capacity。假设没有显式提供capacity,那么程序默认设置为10.LinkedList是双向列表存储结构,不仅实现List接口,还实现Deque双端队列接口。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Java一些八卦集合类相关推荐

  1. JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的。

    JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的. 看完这段代码是不是很熟悉,与我们上面代码基本类似.单列集合都使用到了迭代器,我们以Arr ...

  2. Java多线程之集合类(线程安全和不安全)

    Java多线程之集合类(浅析线程安全和不安全) 本文目录: 1.线程不安全之ArrayList,HashSet,HashMap和线程安全之CopyOnWriteArrayList,CopyOnWrit ...

  3. Java程序设计4——集合类

    1 JAVA集合概述 Java集合封装了一系列数据结构比如链表.二叉树.栈.队列等,然后提供了针对这些数据结构的一系列算法比如查找.排序.替换,使编程难度大大降低.(这句话有可能是非法的,因为个人对算 ...

  4. java中的集合_你真的了解Java中的集合类么?

    Java中的集合类很多,有各种List,各种Map,各种Set.那么这么多类,我们怎么来区分它们呢? 我们来看某个集合类是以什么结尾的,如果以List结尾,那说明这个集合类的本质就是一个List,Li ...

  5. java学习笔记 - 集合类综合案例 斗地主

    集合类方法 最近学到java的各个集合类,常用的有List,Set,Map,这三个都是接口,其中List和Set继承了Collections. 为了锻炼实际掌握各种常用方法的案例,自己写了个斗地主案例 ...

  6. Java中的集合类——HashMap中的并发死链

    Java中的集合类--HashMap中的并发死链 ReHash过程 正常的ReHash过程: 并发的Rehash过程 解决办法 ReHash过程 正常的ReHash过程: 并发的Rehash过程 (1 ...

  7. Java中的集合类--复习

    10.1 集合类与数据容器 Java用集合类来容纳不同种类的数据,这种容纳是建立在未知的基础上,即Java要用有限种类的集合类,来容纳无限种类的数据对象. ¯      分类 µ     以数组为代表 ...

  8. 5 java中的集合类_java基础(5)-集合类1

    集合的由来 数组是很常用的一种数据结构,但假如我们遇到以下这样的的问题: 容器长度不确定 能自动排序 存储以键值对方式的数据 如果遇到这样的情况,数组就比较难满足了,所以也就有了一种与数组类似的数据结 ...

  9. java基础之集合类

    一.Java集合类是什么?java集合类型主要有哪些? 首先看一张概念图,这里囊括了集合类的大部分关系及内容 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中 ...

最新文章

  1. thunderbird怎样方便的导入gmail联系人
  2. 基于WordNet词典的本体源
  3. TensorFlow example示例 Process finished with exit code -1073741819 (0xC0000005)
  4. phpmailer 发送邮件空隙太大_WordPress纯代码无插件开启SMTP邮件服务——墨涩网
  5. 使用NSOperation为你的app加速
  6. 「Python 编程」编码实现网络请求库中的 URL 解析器
  7. ftp服务器文件端口,ftp服务器端口用哪个文件
  8. 工程制图与计算机绘图实训任务书及参考资料,水利工程制图与计算机绘图实训探讨...
  9. 51单片机带闹钟c语言程序,51单片机定时闹钟程序(带按键)
  10. 【已测】开源PHP个人导航网站源码,有后台
  11. Linux: E45: ‘readonly‘ option is set (add ! to override)
  12. 回首2013,寄语步入社会的我——自强不息,厚德载物
  13. 三极管工作原理及测定
  14. 初识C语言--第二弹
  15. 湖北武汉劳务员证书劳务人员实名制的难点分析建筑七大员培训
  16. 【软件构造】LAB1实验报告
  17. Anaconda如何卸载干净
  18. HYSBZ 2251 外星联络
  19. 单点登录CAS-03:cas配置01-配置文件类型
  20. MapReduce 分析 Youtube 数据

热门文章

  1. Oracle中的move命令
  2. 现在为什么面对着人多,陌生人的时候会紧张?
  3. Vue.js not detected
  4. Class文件结构(更新中)
  5. word2vec相关
  6. MA5680T OLT管理软件,全智能判断板卡,无人值守策略,根据光猫类型自动扫描添加光猫...
  7. django+celery+rabitmq
  8. MySQL与OLAP:分析型SQL查询最佳实践探索
  9. C# 代码优化 性能优化【转】
  10. w5100 网上资料整理