0

0

java 容器都有哪些?

月夜之吻

月夜之吻

发布时间:2025-07-31 11:33:01

|

650人浏览过

|

来源于php中文网

原创

java容器主要分为collection和map两大类:1. collection用于存储单个对象,包括list(有序可重复,如arraylist、linkedlist)、set(无序不重复,如hashset、treeset)和queue(先进先出,如arraydeque、priorityqueue);2. map用于存储键值对,key唯一,value可重复,常见实现有hashmap、treemap和hashtable;3. arraylist基于数组,查询快增删慢,linkedlist基于链表,增删快查询慢,选择需根据操作频率决定;4. hashmap通过哈希函数定位桶,冲突时形成链表或红黑树,性能依赖哈希函数质量;5. 线程安全容器包括vector、hashtable(低效)、concurrenthashmap(高并发)、copyonwritearraylist(读多写少)和blockingqueue(生产者消费者模式);6. 选择容器应综合考虑是否排序、是否去重、线程安全、读写比例及性能需求等因素,以匹配具体应用场景结束。

java 容器都有哪些?

Java容器,说白了,就是用来装东西的“篮子”。但这个“东西”可不简单,它可以是任何Java对象。至于都有哪些?那可就多了,但核心的就那么几个。

java 容器都有哪些?

Java容器主要分为Collection和Map两大类。Collection装的是单个的对象,而Map装的是键值对。

Collection下又分List、Set和Queue。List有序可重复,Set无序不重复,Queue则是队列,先进先出。Map呢,就是键值对的集合,key不能重复,value可以重复。

立即学习Java免费学习笔记(深入)”;

java 容器都有哪些?

解决方案:

Java容器主要分为两大类:Collection 和 Map。

java 容器都有哪些?
  • Collection: 用于存储一系列的单个对象。
    • List: 有序列表,元素可以重复。常见的实现类有 ArrayList、LinkedList 和 Vector。
    • Set: 元素不可重复的集合。常见的实现类有 HashSet、LinkedHashSet 和 TreeSet。
    • Queue: 队列,遵循先进先出(FIFO)原则。常见的实现类有 LinkedList(同时实现了 List 和 Queue 接口)、PriorityQueue 和 ArrayDeque。
  • Map: 用于存储键值对,键(Key)是唯一的,值(Value)可以重复。
    • 常见的实现类有 HashMap、LinkedHashMap、TreeMap 和 Hashtable。

ArrayList 和 LinkedList 的区别

ArrayList底层是数组,LinkedList底层是链表。数组的特点是查询快,增删慢;链表的特点是查询慢,增删快。

ArrayList查找快是因为它可以根据下标直接定位到元素,而LinkedList需要从头开始遍历。LinkedList增删快是因为只需要修改指针,而ArrayList需要移动元素。

但是,这也不是绝对的。如果增删操作发生在ArrayList的末尾,那么效率也很高。如果LinkedList需要频繁的定位到某个元素,那么效率也会很低。

魔法映像企业网站管理系统
魔法映像企业网站管理系统

技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作

下载

所以,选择ArrayList还是LinkedList,需要根据具体的场景来决定。如果查询操作多,增删操作少,那么选择ArrayList;如果增删操作多,查询操作少,那么选择LinkedList。

HashMap 的工作原理?

HashMap基于哈希表实现,哈希表的核心就是哈希函数。当你put一个键值对到HashMap中时,HashMap会先计算key的hash值,然后根据hash值找到对应的桶(bucket)。如果桶是空的,就直接把键值对放进去。如果桶里已经有元素了,就用equals方法比较key是否相同。如果相同,就覆盖value;如果不同,就形成一个链表(或者红黑树,当链表长度超过一定阈值时)。

get的时候,也是先计算key的hash值,然后找到对应的桶。如果桶里只有一个元素,就直接返回。如果桶里有多个元素,就用equals方法比较key是否相同,找到对应的键值对并返回。

HashMap的性能瓶颈在于哈希冲突。如果哈希冲突太多,会导致链表太长,查询效率降低。所以,好的哈希函数可以减少哈希冲突。

线程安全的容器有哪些?

Java提供了一些线程安全的容器,主要有以下几种:

  • Vector: ArrayList的线程安全版本,使用synchronized关键字保证线程安全。但是,效率比较低。
  • Hashtable: HashMap的线程安全版本,也是使用synchronized关键字保证线程安全。效率也比较低。
  • Collections.synchronizedList(List list): 可以将一个List包装成线程安全的List。
  • Collections.synchronizedMap(Map map): 可以将一个Map包装成线程安全的Map。
  • ConcurrentHashMap: 高并发场景下使用的线程安全的HashMap。它使用了分段锁技术,提高了并发度。
  • CopyOnWriteArrayList: 读多写少的场景下使用的线程安全的List。每次修改都会创建一个新的副本,然后替换旧的副本。
  • BlockingQueue: 阻塞队列,可以用于实现生产者消费者模式。常见的实现类有 ArrayBlockingQueue、LinkedBlockingQueue 和 PriorityBlockingQueue。

这些线程安全的容器各有特点,需要根据具体的场景选择合适的容器。比如,如果并发量不高,可以使用Vector或Hashtable;如果并发量很高,可以使用ConcurrentHashMap;如果读多写少,可以使用CopyOnWriteArrayList;如果需要实现生产者消费者模式,可以使用BlockingQueue。

如何选择合适的容器?

选择容器,得看你的需求。

  • 是否需要排序? 如果需要排序,可以选择TreeSet或TreeMap。
  • 是否允许重复元素? 如果不允许重复元素,可以选择Set。
  • 是否需要线程安全? 如果需要线程安全,可以选择Vector、Hashtable或ConcurrentHashMap。
  • 读多写少还是写多读少? 如果读多写少,可以选择CopyOnWriteArrayList。
  • 是否需要实现队列? 如果需要实现队列,可以选择Queue。

还有一些其他的考虑因素,比如内存占用、性能等等。总之,选择容器需要综合考虑各种因素,选择最适合自己的容器。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

835

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

740

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

735

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

399

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16926

2023.08.03

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.6万人学习

C# 教程
C# 教程

共94课时 | 6.9万人学习

Java 教程
Java 教程

共578课时 | 47万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号