前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java集合框架:什么是Java集合框架?List、Set与Map接口如何选择?底层原理实现在JDK 8、17、21有什么区别?

Java集合框架:什么是Java集合框架?List、Set与Map接口如何选择?底层原理实现在JDK 8、17、21有什么区别?

作者头像
猫头虎
发布2024-12-18 18:46:40
发布2024-12-18 18:46:40
20000
代码可运行
举报
运行总次数:0
代码可运行

Java集合框架:什么是Java集合框架?List、Set与Map接口如何选择?底层原理实现在JDK 8、17、21有什么区别?

引言

在Java开发中,集合框架是必备工具之一,用于存储、操作和管理数据。ListSetMap是最常用的接口,它们各自适用不同的场景。同时,随着JDK 8、JDK 17和JDK 21的不断升级,集合框架的底层实现也逐步优化,性能显著提升。在本篇文章中,猫头虎将详细解析:

  • 什么是Java集合框架?
  • List、Set与Map接口的选择与适用场景
  • JDK 8、JDK 17、JDK 21中集合框架的底层原理与优化

掌握Java集合框架的核心概念和底层原理,让你写出高性能的代码!🚀

Java进阶之路:必知必会的核心知识点与JDK8、JDK17、JDK21版本对比
Java进阶之路:必知必会的核心知识点与JDK8、JDK17、JDK21版本对比

正文

问题背景:痛点描述

粉丝提问: 猫哥,Java中的List、Set和Map该如何选择?这些集合底层在JDK 8、17和21中有什么区别?

猫头虎解析:选择合适的集合类型可以大大提高程序性能。随着JDK版本升级,集合框架的底层实现也不断优化,特别是在并发安全性能提升方面。


核心概念:什么是Java集合框架?

1. Java集合框架概述

Java集合框架是用来存储和管理对象的类和接口的集合,主要分为三大核心接口:

  • List:有序、可重复的集合。
  • Set:无序、不可重复的集合。
  • Map:键值对存储数据,键不可重复。
2. 集合框架的类图

说明

  1. Collection是最顶层接口。
  2. ListSet继承CollectionMap是独立接口。

List、Set与Map的选择与区别

1. List:有序且允许重复元素

实现类

特点

使用场景

ArrayList

基于数组,查询快,插入删除慢,线程不安全。

适合查询多、插入删除少的场景。

LinkedList

基于双向链表,插入删除快,查询慢,线程不安全。

适合频繁插入和删除的场景。

示例代码 🚀

代码语言:javascript
代码运行次数:0
运行
复制
List<String> list = new ArrayList<>();
list.add("猫头虎");
list.add("Java");
System.out.println(list);

2. Set:无序且不允许重复元素

实现类

特点

使用场景

HashSet

基于HashMap实现,无序,去重依赖hashCode。

适合存储无序、唯一元素集合。

TreeSet

基于红黑树,元素有序(自然排序或比较器)。

需要对元素排序的场景。

示例代码 🚀

代码语言:javascript
代码运行次数:0
运行
复制
Set<String> set = new HashSet<>();
set.add("猫头虎");
set.add("Java");
set.add("Java");  // 重复元素自动过滤
System.out.println(set);

3. Map:键值对存储,键唯一

实现类

特点

使用场景

HashMap

基于哈希表,存储无序,键不可重复。

快速查找、键值存储。

TreeMap

基于红黑树,键有序(自然排序或自定义排序)。

需要对键排序的场景。

示例代码 🚀

代码语言:javascript
代码运行次数:0
运行
复制
Map<String, String> map = new HashMap<>();
map.put("key1", "猫头虎");
map.put("key2", "Java");
System.out.println(map);

JDK 8、17、21中集合框架的底层区别

1. HashMap底层实现
JDK 8:数组+链表+红黑树
  • 链表长度超过8且数组大小大于64时,链表转换为红黑树,提高查询效率。
  • 核心优化:减少链表查询时间,从O(n)降为O(log n)。
JDK 17:性能优化
  • 提升了并发访问性能,优化HashMap的线程安全。
JDK 21:内存与性能微调
  • 虚拟线程的支持:在高并发场景下,集合类与虚拟线程结合,实现更高效的资源利用。

2. ArrayList与LinkedList的优化
JDK 8
  • ArrayList扩容机制:默认初始容量为10,扩容为1.5倍。
  • LinkedList结构基本无变化。
JDK 17与21
  • 内存分配优化:减少了对象创建时的内存碎片,提高了GC效率。
  • 并发访问提升java.util.concurrent包进一步优化。

3. ConcurrentHashMap的演进

版本

优化内容

JDK 8

使用CAS操作与分段锁,提升并发性能。

JDK 17

优化哈希冲突解决,提升高并发环境下的吞吐量。

JDK 21

支持虚拟线程,与并发任务高效结合执行。


Q&A互动答疑

Q:什么时候使用HashMap,什么时候使用TreeMap? A

  • HashMap:适用于无序的键值存储,查询效率高。
  • TreeMap:适用于需要对键进行排序的场景。

Q:JDK 8后HashMap为什么引入红黑树? A:当链表过长时,查询效率低。引入红黑树可以将查询时间从O(n)优化为O(log n)。


总结:集合框架的选择与底层原理

接口

实现类

特点

适用场景

List

ArrayList、LinkedList

有序、可重复

顺序存储与高频查询场景

Set

HashSet、TreeSet

无序、去重(HashSet无序,TreeSet有序)

唯一元素存储,需排序时用TreeSet

Map

HashMap、TreeMap

键值存储,键唯一

快速查找(HashMap),排序键(TreeMap)


未来趋势与总结

随着JDK版本的升级,集合框架不断优化:

  • JDK 8引入红黑树,提高HashMap查询效率。
  • JDK 17优化了集合的并发性能与内存分配。
  • JDK 21进一步配合使用,实现高性能并发编程。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java集合框架:什么是Java集合框架?List、Set与Map接口如何选择?底层原理实现在JDK 8、17、21有什么区别?
    • 引言
  • 正文
    • 问题背景:痛点描述
    • 核心概念:什么是Java集合框架?
      • 1. Java集合框架概述
      • 2. 集合框架的类图
    • List、Set与Map的选择与区别
      • 1. List:有序且允许重复元素
      • 2. Set:无序且不允许重复元素
      • 3. Map:键值对存储,键唯一
    • JDK 8、17、21中集合框架的底层区别
      • 1. HashMap底层实现
      • 2. ArrayList与LinkedList的优化
      • 3. ConcurrentHashMap的演进
    • Q&A互动答疑
    • 总结:集合框架的选择与底层原理
    • 未来趋势与总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档