collection

java中集合都继承至collection接口。

List

元素按插入顺序保存,元素可重复。

ArrayList:Object[]数组实现,查询快,增删慢,线程不安全。

LinkedList:Node双向链表实现(头结点为first),查询慢(要移动指针),增删快,线程不安全。

Vector:矢量数组/向量,Object[]数组实现,查询快,增删慢,线程同步(方法加锁)。

Stack:继承至Vector,先进后出。

Set

顺序和元素的hash值有关,元素唯一。

HashSet:内部是HashMap,只使用到key部分,value为一个固定的 Object PRESENT = new Object();可以为null,线程不安全。

LinkedHashSet:继承至HashSet,线程不安全。

TreeSet:内部是TreeMap,原理和HashSet类似,红黑树树实现,元素唯一,自动排序,不能为null。

Map

HashMap:底层hash表(散列表,hash数组,Node<K,V>[] table,key,value可以为null。

Node实现了Map.Entry<K,V>接口),线程不安全,数组里的每个元素(key-value)都是一个单链表的头节点,链表是用来解决hash冲突的。

通过元素的hash值和equals方法判断唯一性的:元素的hash值(执行hash函数后得到的值)不同,直接存到哈希表,如果相同(有多个则要遍历判断每一个)判断元素的equals是否为true,如果为true视为相同元素,不存,为false视为不同元素,存储(放在node节点下,多个则要放尾节点下)。

扩容后的链表顺序和原来相反(头插法,减少一次循环次数),多线程下扩容过程中可能出现死锁:线程1准备处理节点,线程2把HashMap扩容成功,链表已经逆向排序,那么线程1再处理节点时就可能出现环形链表形成死循环。jkd1.8+版本中,链表元素超过8就会转为TreeNode(红黑树)

LinkedHashMap:继承至HashMap,双向链表(Entry<K,V> before, after;Entry<K,V> 继承至HashMap.Node<K,V> )。

HashTable:内部实现和hashMap相同(Entry<?,?>[] table),区别在于线程安全(方法上加锁),key,value都不能为null。

TreeMap:顶节点是Entry<K,V> root(实现了Map.Entry<K,V>接口,每个对象保存三个节点引用,当前,左,右以及是否为黑的属性),红黑树对所有key排序,不能为null。

==    :基本类型变量,直接比较存‘值’是否相等,引用类型变量比较所指向对象的地址。

equals:默认(==)比较的是两个引用类型变量所指向的对象的地址,字符串比较值。

JAVA常用数据结构相关推荐

  1. java数组设计的原理_动态图-Java常用数据结构及其设计原理

    > 转载 - [图解Java常用数据结构(一) - 大道方圆 - 博客园 ](https://www.cnblogs.com/xdecode/p/9321848.html) > https ...

  2. 几张动态图捋清Java常用数据结构及其设计原理

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  3. 图解 Java 常用数据结构

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过 ...

  4. 图解Java常用数据结构

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  5. java简单数据结构_图解Java常用数据结构

    最近在整理数据结构方面的知识, 系统化看了下 Java 中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于 jdk8, 可能会有些特性与 jdk7 之前不相同, 例如 LinkedList ...

  6. 原 Java常用数据结构及特点

    这篇文章主要是自我回归并和大家分享一下Java常用的数据结构,以及各自数据结构所具有的特点.废话不多说,我们直接开始. Java中有几种常用的数据结构,主要分为Collection和map两个主要接口 ...

  7. 图解Java常用数据结构(一)

    点击上方"程序员大咖",选择"置顶公众号" 关键时刻,第一时间送达! 先不说楚枫的这般年纪,能够踏入元武一重说明了什么,最主要的是,楚枫在刚刚踏入核心地带时,明 ...

  8. 动图 + 源码,演示 Java 中常用数据结构执行过程及原理

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  9. java set第n位_数据结构与算法——常用数据结构及其Java实现

    本文采用Java语言来进行描述,帮大家好好梳理一下数据结构与算法,在工作和面试中用的上.亦即总结常见的的数据结构,以及在Java中相应的实现方法,务求理论与实践一步总结到位. 常用数据结构 数组 数组 ...

  10. 数据结构中缀表达式转后缀表达式与后缀表达式的求值实训报告_动图+源码,演示 Java 中常用数据结构执行过程及原理...

    程序员的成长之路互联网/程序员/成长/职场 关注 阅读本文大概需要 3.7 分钟. 作者:大道方圆cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, ...

最新文章

  1. pythonrequest爬取小说,pythonrequest爬取小说_python爬取斗破苍穹小说
  2. centos php memcache扩展,CentOS安装php5的memcache扩展
  3. DL之DNN:自定义2层神经网络TwoLayerNet模型(封装为层级结构)利用MNIST数据集进行训练、GC对比
  4. python得到windows自启动列表
  5. 20应用统计考研复试要点(part16)--应用多元分析
  6. 无连接网络通信程序UDP
  7. groovy 访问java,Groovy如何能够访问Java类的私有方法?
  8. Aix5~6小机运维
  9. 理解CSS3属性transition
  10. Spring实战(第4版)第1章 Spring之旅
  11. onenote使用python开发_我应该用onenote还是印象笔记?
  12. Unity 游戏多语言解决方案和字体错误解决方法的想法
  13. Dev C++开发lib和dll
  14. 什么是USB金手指?
  15. Unity中角色基本属性与数值的管理
  16. 「PAT乙级真题解析」Basic Level 1072 开学寄语 (问题分析+完整步骤+伪代码描述+提交通过代码)
  17. 人常见的思维盲区有哪些?看懂这个你会少犯一半错误
  18. 苹果手机语音备忘录在哪_苹果手机删除的备忘录怎样找回?方法简单,3秒学会!赶紧来看...
  19. 安卓基础学习 Day18|按键事件+手势操作(图片的放大、缩小、切换)
  20. OpenGL学习之VS2017+glfw+glew/glad/freeglut的基本配置与中文教程汇总

热门文章

  1. python元组的定义方式_python基础之元组(Tuple)、字典(Dictionary)详解
  2. 机票三字码,对应城市及机场一览表
  3. MMO 游戏服务器引擎设计
  4. Arduino六足机器人
  5. 关于vue项目中移动端实现用户选择照片、照片裁剪、一次上传多张图片功能。
  6. 卸载重装Ubuntu22.04双系统
  7. python 入门篇 之 正则表达式re.findall的使用
  8. HDFS的设计目标是什么?
  9. LG-P3939 数颜色
  10. wxid 微信号设置隐私 微信号搜不到 恢复好友总结