JDK 原生集合简单对比

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

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

 

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

    3168 引用 • 8207 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用
  • 大数据

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

    89 引用 • 113 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 793 回帖 • 1 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    108 引用 • 54 回帖 • 2 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 2 关注
  • Postman

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

    4 引用 • 3 回帖
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    131 引用 • 1114 回帖 • 152 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖 • 1 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 404 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 290 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    148 引用 • 257 回帖 • 2 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    14 引用 • 7 回帖 • 3 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 607 关注
  • 30Seconds

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

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

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    76 引用 • 37 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 626 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 642 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 636 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    185 引用 • 318 回帖 • 347 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 627 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖
  • Redis

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

    284 引用 • 247 回帖 • 176 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 55 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 1 关注