JDK 原生集合简单对比

本贴最后更新于 3039 天前,其中的信息可能已经物是人非

整理半下午才整理这么一点(每个对象都重新翻了下源码,防止写错),明天继续弄

 

类名 类说明 数据结构 线程安全 同步方式 可重复 顺序 对比方式 存储null
ArrayList 遍历速度很快,数据结构调整效率低一点 数组 用conllections.synchronizedList()包装对象或者外部用synchronized/lock控制 可重复 有序 equals Y
LinkedList 适合数据修改删除比较多的情况,遍历比较慢 链表 用conllections.synchronizedList()包装对象或者外部用synchronized/lock控制 可重复 有序 equals Y
Vector 遍历速度很快,数据结构调整的操作效率低一点 数组 synchroized 可重复 有序 equals Y
CopyOnWriteArrayList 所有操作都是通过数组拷贝的方式,所以对于大批量数据操作此集合比较适合 数组 ReentrantLock 可重复 有序 equals Y
Stack 在vector的基础上进行扩展,支持了lifo和查询对象距离栈顶距离 数组 synchroized 可重复 有序 equals Y
                 
HashMap 适合无序的对象存储(多线程下put会引起死循环,CPU100%)(请重写键对象的equals和hashCode,在hash碰撞的情况下会严重影响性能) hash表(数组中存储嵌套链对象) 用conllections.synchronizedMap()包装对象或者外部用synchronized/lock控制 键不能重复 无序(通过Collections.sort(实现Comparator接口)进行排序) equals Y(键只允许一个NULL,值无要求)
ConcurrentHashMap 线程较多的请况下,请和其它同步方式进行性能比较(请重写键对象的equals和hashCode,在hash碰撞的情况下会严重影响性能) 数据segment(table)存储,segment中每个对象(每个对象一个锁)是一个hash表(数组中存储嵌套链对象) ReentrantLock(分段锁定,支持多段同时并发) 键不能重复 无序(通过Collections.sort(实现Comparator接口)进行排序) equals Y(键只允许一个NULL,值无要求)
ConcurrentSkipHashMap                
EnumMap                
HashTable 适合线程较多的情况下使用(请重写键对象的equals和hashCode,在hash碰撞   synchroized 键不能重复 无序(通过Collections.sort(实现Comparator接口)进行排序) equals N(值/值不能为NULL)
IdentityHashMap 不考虑对比方式的情况下,此集合的性能优于HashMap(hash方式为线性探头,优于嵌套链) hash表(数组) 用conllections.synchronizedList()包装对象或者外部用synchronized/lock控制 键不能重复 无序(通过Collections.sort(实现Comparator接口)进行排序) 比较引用(内存地址)  Y(键只允许一个NULL,值无要求)
LinkedHashMap                
Properties 此对象是对HashTable的扩展,允许通过流装载内容,key和value为非string的情况下会引起一定异常(取值为空等) 两个hash表(其中一个是默认hash表,即第一个hash表中为空则检索第默认hash表) synchroized 键不能重复 无序(通过Collections.sort(实现Comparator接口)进行排序) equals Y(键只允许一个NULL,值无要求)
TreeMap                
                 
ConcurrentSkipListSet                
CopyOnWriteArraySet                
EnumSet                
HashSet                
LinkedHashSet                
TreeSet                
                 
ArrayBlockingQueue                
ArrayDeque                
ConcurrentLinkedQueue                
DelayQueue                
LinkedBlockingDeque                
LinkedBlockingQueue                
LinkedList                
PriorityBlockingQueue                
类名 类说明 数据结构 线程安全 同步方式 可重复 顺序 对比方式 存储null
ArrayList 遍历速度很快,数据结构调整效率低一点 数组 用conllections.synchronizedList()包装对象或者外部用synchronized/lock控制 可重复 有序 equals Y
LinkedList 适合数据修改删除比较多的情况,遍历比较慢 链表 用conllections.synchronizedList()包装对象或者外部用synchronized/lock控制 可重复 有序 equals Y
Vector 遍历速度很快,数据结构调整的操作效率低一点 数组 synchroized 可重复 有序 equals Y
CopyOnWriteArrayList 所有操作都是通过数组拷贝的方式,所以对于大批量数据操作此集合比较适合 数组 ReentrantLock 可重复 有序 equals Y
Stack 在vector的基础上进行扩展,支持了lifo和查询对象距离栈顶距离 数组 synchroized 可重复 有序 equals Y
                 
HashMap 适合无序的对象存储(多线程下put会引起死循环,CPU100%)(请重写键对象的equals和hashCode,在hash碰撞的情况下会严重影响性能) hash表(数组中存储嵌套链对象) 用conllections.synchronizedMap()包装对象或者外部用synchronized/lock控制 键不能重复 无序(通过Collections.sort(实现Comparator接口)进行排序) equals Y(键只允许一个NULL,值无要求)
ConcurrentHashMap 线程较多的请况下,请和其它同步方式进行性能比较(请重写键对象的equals和hashCode,在hash碰撞的情况下会严重影响性能) 数据segment(table)存储,segment中每个对象(每个对象一个锁)是一个hash表(数组中存储嵌套链对象) ReentrantLock(分段锁定,支持多段同时并发) 键不能重复 无序(通过Collections.sort(实现Comparator接口)进行排序) equals Y(键只允许一个NULL,值无要求)
ConcurrentSkipHashMap                
EnumMap                
HashTable 适合线程较多的情况下使用(请重写键对象的equals和hashCode,在hash碰撞   synchroized 键不能重复 无序(通过Collections.sort(实现Comparator接口)进行排序) equals N(值/值不能为NULL)
IdentityHashMap 不考虑对比方式的情况下,此集合的性能优于HashMap(hash方式为线性探头,优于嵌套链) hash表(数组) 用conllections.synchronizedList()包装对象或者外部用synchronized/lock控制 键不能重复 无序(通过Collections.sort(实现Comparator接口)进行排序) 比较引用(内存地址)  
LinkedHashMap                
Properties 此对象是对HashTable的扩展,允许通过流装载内容,key和value为非string的情况下会引起一定异常(取值为空等) 两个hash表(其中一个是默认hash表,即第一个hash表中为空则检索第默认hash表) synchroized 键不能重复 无序(通过Collections.sort(实现Comparator接口)进行排序) equals Y(键只允许一个NULL,值无要求)
TreeMap                
                 
ConcurrentSkipListSet                
CopyOnWriteArraySet                
EnumSet                
HashSet                
LinkedHashSet                
TreeSet                
                 
ArrayBlockingQueue                
ArrayDeque                
ConcurrentLinkedQueue                
DelayQueue                
LinkedBlockingDeque                
LinkedBlockingQueue                
LinkedList                
PriorityBlockingQueue                
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 62 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    287 引用 • 4484 回帖 • 669 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    26 引用 • 84 回帖
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 241 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    222 引用 • 473 回帖
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2031 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 230 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖 • 1 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 471 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 722 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 430 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 4 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 4 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    190 引用 • 1057 回帖
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 553 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    176 引用 • 815 回帖
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 1 关注
  • 创业

    你比 99% 的人都优秀么?

    84 引用 • 1399 回帖
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 383 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 210 关注
  • gRpc
    11 引用 • 9 回帖 • 73 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 537 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 9 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 41 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 588 回帖