博客
关于我
Java集合框架 List集合、Set集合、Map集合 学习泛型与包装类的装箱拆箱
阅读量:338 次
发布时间:2019-03-04

本文共 3332 字,大约阅读时间需要 11 分钟。

Java集合框架深入解析

集合框架是Java编程中最核心的工具之一,它为我们提供了灵活且高效的数据结构,适用于各种场景。从简单的集合操作到复杂的键值对管理,集合框架为开发者提供了强大的支持。

集合框架概述

集合框架的根接口是Collection,它定义了单列集合的基本操作方法。集合的主要特点是元素的唯一性和无序性。Collection接口下有两个重要的子接口:ListSet

  • List:支持有序且允许重复的元素,如ArrayList和LinkedList。
  • Set:支持无序且不允许重复的元素,如HashSet和TreeSet。

集合框架的核心操作包括添加、删除、检查存在性、清空等功能,这些操作对于任何实现集合的类都是通用的。

List和Set的区别

ListSet虽然都是Collection的子接口,但它们的核心特性存在显著差异:

  • List:元素具有顺序性,支持索引访问,适合需要有序操作的场景。
  • Set:元素无序,强调唯一性,适合需要快速查找的场景。

理解这两者的区别是学习集合框架的基础。

Map接口详解

Map接口是Java集合框架中的另一个重要组成部分,它用于存储键值对。Map的核心特性是通过键快速定位对应的值。

常见的Map实现类包括:

  • HashMap:哈希表实现,查找和插入操作平均时间复杂度为O(1)。
  • TreeMap:基于红黑树实现,保留有序键集。

Map提供了丰富的操作方法,包括:

  • put:添加键值对。
  • get:根据键获取对应的值。
  • containsKey、containsValue、containsEntry:检查键值对的存在性。
  • remove:移除键值对。
  • replace:替换键值对。
  • computeIfAbsent、computeIfPresent:条件性操作。

通过遍历Map中的所有键值对,可以使用for-each循环简化代码。

Iterator与foreach循环

集合框架提供了Iterator接口用于遍历集合元素,这是高级操作。Iterator的常用方法包括:

  • hasNext:判断是否有下一个元素。
  • next:获取下一个元素。
  • remove:移除当前元素。

为了简化操作,JDK5.0引入了foreach增强循环,允许直接遍历集合元素。这种写法更简洁,广泛应用于日常开发。

泛型的应用

集合框架支持泛型,允许定义类型安全的集合操作。例如:

List
list = new ArrayList<>();list.add("Hello");String str = list.get(0); // 安全类型检查

泛型在编译时确保类型一致,运行时通过类型擦除实现。正确使用泛型可以提升代码的健壮性和可读性。

装箱与拆箱

Java提供了装箱和拆箱机制,将基本类型和对象类型互相转换:

  • 装箱:将基本类型转换为包装类。例如:

    Integer num = Integer.valueOf(10);
  • 拆箱:将包装类转换回基本类型。例如:

    int num = numValue.intValue();

自动装箱和拆箱在基本类型和包装类之间无缝连接,简化了代码编写。

集合操作示例

以下是集合和Map的典型操作示例:

集合操作

Collection
collection = new ArrayList<>();collection.add("aaa");System.out.println(collection.contains("aaa")); // trueSystem.out.println(collection.equals("aaa")); // falseSystem.out.println(collection.isEmpty()); // falsecollection.remove("aaa");System.out.println(collection.isEmpty()); // true

Map操作

Map
map = new HashMap<>();System.out.println(map.isEmpty()); // trueSystem.out.println(map.size()); // 0map.put("Zero", "000");map.put("One", "111");map.put("Two", "222");System.out.println(map.containsKey("Zero")); // trueSystem.out.println(map.containsValue("222")); // trueSystem.out.println(map.get("Two")); // "222"System.out.println(map.size()); // 3map.put("Three", "333");System.out.println(map.size()); // 4// 处理缺失键值对System.out.println(map.get("Fore")); // nullSystem.out.println(map.getOrDefault("Fore", "444")); // "444"// 遍历键值对for (Map.Entry
entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue());}System.out.println(map.keySet()); // {Two=222, Three=333, Zero=000, One=111}System.out.println(map.values()); // {000, 111, 222, 333}// 移除操作map.remove("Zero");for (Map.Entry
entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue());}System.out.println(map.remove("One", "111")); // "111"for (Map.Entry
entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue());}// 替换操作map.replace("Two", "二二二");map.replace("Three", "333", "三三三");for (Map.Entry
entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue());}map.replace("Three", "222", "333");for (Map.Entry
entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue());}

这些示例展示了集合框架的实际使用场景,帮助开发者更好地理解和掌握。

总结

集合框架是Java编程的核心工具,涵盖了从单列到双列的多种数据结构。理解集合框架的特性和使用方法,对于任何Java开发者的成长至关重要。从简单的集合操作到复杂的Map管理,再到泛型和Iterator的应用,集合框架为开发者提供了强大的支持。通过不断实践和总结,开发者能够充分发挥集合框架的优势,写出更高效、更健壮的代码。

转载地址:http://gcee.baihongyu.com/

你可能感兴趣的文章
AcWing 849. Dijkstra求最短路 I(Dijkstra)
查看>>
AcWing 4. 多重背包问题(带有个数限制的完全背包问题dp)
查看>>
EventBus简单Demo实现
查看>>
监听CPU和内存占用率脚本
查看>>
添加Selinux权限
查看>>
ifconfig网络配置信息解析
查看>>
(2019.9.10测试可用)如何在Windows的cmd中使用ls命令
查看>>
多因子策略中的IC、IR是什么,以及如何计算
查看>>
pd.resample('B')指重采样为工作日
查看>>
债券中的久期是什么意思
查看>>
MA、WMA、EMA、EXPMA区别及公式详述
查看>>
量化新手初识docker
查看>>
Linux中常见的echo是什么意思
查看>>
国内量化交易现状总结
查看>>
阿里云云解析DNS各种概念深度剖析
查看>>
SQLite基础用法
查看>>
(20200328已解决)从docker容器内复制文件到宿主机
查看>>
理解Docker ulimit参数
查看>>
pandas.groupby().rank()用法详解
查看>>
Factor Exposure因子暴露
查看>>