JDK 原生集合简单对比

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

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

 

类名 类说明 数据结构 线程安全 同步方式 可重复 顺序 对比方式 存储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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • abitmean

    有点意思就行了

    31 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖 • 1 关注
  • 笔记

    好记性不如烂笔头。

    306 引用 • 782 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    332 引用 • 619 回帖 • 1 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 444 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 154 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    45 引用 • 25 回帖
  • 安装

    你若安好,便是晴天。

    131 引用 • 1184 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    175 引用 • 992 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 44 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    51 引用 • 37 回帖 • 1 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    4 引用 • 91 回帖
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    536 引用 • 672 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 1 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • IPFS

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

    20 引用 • 245 回帖 • 234 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 45 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    54 引用 • 85 回帖
  • C

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

    83 引用 • 165 回帖 • 13 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 110 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 4 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 1 关注