发布时间:2026/8/5 9:52:10
计算机学习笔记 ArrayList和HashMap的具体用法和代码示例 import java.util.ArrayList; import java.util.HashMap;第一部分ArrayList动态数组1. 核心概念与内存机制定义ArrayList 是List接口的实现类底层基于动态数组实现。与普通数组不同它没有固定大小的限制可以自动扩容。核心特性随机访问极快基于数组下标获取和修改元素的时间复杂度为 $O(1)$。插入/删除较慢在中间位置插入或删除元素时需要移动后续所有元素时间复杂度为 $O(n)$。泛型限制只能存储引用数据类型基本数据类型如int必须使用包装类如Integer。2. 常用方法详解与代码示例①add(E e)/add(int index, E element)用法将元素追加到列表末尾或在指定位置插入元素。插入时该位置及后续元素会向后移动一位。ArrayListString list new ArrayList(); list.add(Apple); list.add(Banana); list.add(1, Cherry); // 在索引1处插入Banana后移 // 结果: [Apple, Cherry, Banana]②get(int index)用法获取指定索引处的元素索引从0开始。String fruit list.get(1); // 获取索引1的元素 System.out.println(fruit); // Cherry③set(int index, E element)用法替换指定索引处的元素并返回被替换的旧元素。String old list.set(1, Orange); System.out.println(old); // Cherry System.out.println(list); // [Apple, Orange, Banana]④remove(int index)/remove(Object o)用法按索引删除返回被删元素或按对象删除返回布尔值。list.remove(0); // 删除索引0的元素Apple list.remove(Banana); // 删除值为Banana的元素⑤size()/isEmpty()/clear()用法获取元素个数、判断是否为空、清空所有元素。System.out.println(list.size()); // 元素个数 System.out.println(list.isEmpty()); // 是否为空 list.clear(); // 清空列表⑥contains(Object o)用法判断列表中是否包含指定元素返回布尔值。boolean has list.contains(Apple); // true⑦indexOf(Object o)/lastIndexOf(Object o)用法返回元素第一次/最后一次出现的索引未找到返回 -1。int idx list.indexOf(Cherry);⑧subList(int fromIndex, int toIndex)用法截取部分元素包头不包尾。注意返回的是原列表的视图修改子列表会影响原列表。ListString sub list.subList(1, 3);3. ArrayList的遍历方式ArrayListString fruits new ArrayList(); fruits.add(Apple); fruits.add(Banana); fruits.add(Orange); // 方式1普通for循环适合需要索引的场景 for (int i 0; i fruits.size(); i) { System.out.println(fruits.get(i)); } // 方式2增强for-each推荐简洁安全 for (String fruit : fruits) { System.out.println(fruit); }4. 动态扩容机制当添加元素导致size 容量时ArrayList 会自动扩容。新容量通常为原容量的 1.5 倍oldCapacity (oldCapacity 1)。如果预知数据量可在构造时指定初始容量以避免频繁扩容。第二部分HashMap哈希表1. 核心概念与内存机制定义HashMap 实现了Map接口基于哈希表数组 链表 红黑树实现用于存储键值对Key-Value。核心特性Key 唯一且无序不允许重复键不保证存储顺序。允许 Null允许一个 null 键和多个 null 值。高效查找增删改查的平均时间复杂度为 $O(1)$。非线程安全多线程环境下应使用ConcurrentHashMap。2. 底层工作原理哈希计算对 Key 调用hashCode()计算哈希值确定在数组中的存储位置桶。冲突处理若多个 Key 落入同一个桶JDK 1.8 采用链表存储当链表长度超过8且数组长度 ≥ 64 时链表转为红黑树以提升查找效率。扩容机制当元素数量超过容量 × 加载因子(默认0.75)时触发扩容新容量为原来的2倍所有元素需重新计算位置。3. 常用方法详解与代码示例①put(K key, V value)用法添加或更新键值对。若 Key 已存在覆盖旧值并返回旧值不存在则返回 null。HashMapString, Integer map new HashMap(); map.put(Tom, 90); Integer old map.put(Tom, 95); // 覆盖old 90②get(Object key)/getOrDefault(K key, V defaultValue)用法根据 Key 获取 Value。若 Key 不存在get返回 nullgetOrDefault返回指定的默认值。int score map.getOrDefault(Jerry, 0); // Jerry不存在返回0③remove(Object key)用法删除指定 Key 的键值对返回被删除的 Value。map.remove(Tom);④containsKey(Object key)/containsValue(Object value)用法判断是否包含指定的 Key 或 Value。boolean hasKey map.containsKey(Tom);⑤size()/isEmpty()/clear()用法获取键值对数量、判空、清空。int count map.size();⑥keySet()/values()/entrySet()用法获取所有 Key 的集合、所有 Value 的集合、所有键值对的集合。SetString keys map.keySet(); CollectionInteger vals map.values(); SetMap.EntryString, Integer entries map.entrySet();4. HashMap的遍历方式HashMapString, Integer map new HashMap(); map.put(Apple, 5); map.put(Banana, 3); // 推荐方式遍历 entrySet性能最优 for (Map.EntryString, Integer entry : map.entrySet()) { System.out.println(entry.getKey() entry.getValue()); }核心对比总结对比维度ArrayListHashMap数据结构动态数组哈希表数组链表红黑树存储方式单列元素有序键值对Key唯一无序核心操作add(),get(index)put(),get(key)查找效率适用场景频繁按索引访问、尾部追加快速按键查找、去重映射

相关新闻

2026/8/5 9:52:10

Java构建棋牌H5:高效开发实战指南

在技术开发这个范畴里, 专门聚焦于特定的工具, 进而深入地去发掘它的潜在能力, 常常能够带来出乎预料的效率以及自由度。对于那些期望构建棋牌类H5应用的个人或者小团队来讲, 深入地掌握JAVA这个成熟又稳定的技术栈, 能够成为一种高效且可把控的达成途径。这种做法着重于对核心…

2026/8/5 9:52:10

ChatGPT每日使用指南:从API配置到工作流集成的实践

1. 为什么“每日使用”比“偶尔尝试”更能体现ChatGPT的价值OpenAI高管呼吁每日使用ChatGPT,这背后不是一个简单的营销口号,而是一个关于如何真正用好AI工具的实践建议。很多人把ChatGPT当作一个“玩具”或“搜索引擎替代品”,只在遇到难题时…

2026/8/5 10:52:15

IDM插件失效与强制更新:从原理到实战的完整解决方案

1. 问题缘起:当“自动更新”变成“强制报废” 如果你和我一样,是个重度依赖IDM(Internet Download Manager)来管理网络下载的老用户,那么最近几个月,你很可能遭遇了一场突如其来的“断崖式”体验降级。具体…

2026/8/5 10:52:15

基于企业微信的 SCRM 平台 LinkWeChat 开发教程:01 架构全景、环境搭建与 Maven 多模块构建体系

文章目录 概述 第一部分 项目概述与架构全景 1.1 业务定位与核心价值 1.2 整体架构概览 架构拓扑图 数据请求流向 1.3 微服务模块详解 模块总览 各模块职责详述 1.4 模块间依赖关系 1.5 技术栈版本清单 1.6 启动入口统一模式 第二部分 开发环境准备与工具链搭建 2.1 JDK 1.8 安…

2026/8/5 10:47:15

C++ Boost.Beast WebSocket 服务端开发:握手、读写与控制帧

本文基于 Boost.Beast 实现 WebSocket 服务端和客户端,讲解 stream 声明、握手流程、消息读写、binary/text 模式、ping/pong/close 控制帧、超时设置。所有 API 均对照 Beast 官方文档与头文件核实。 本专栏 websocketpp介绍过 WebSocket 概念,Beast 是 Asio 原生的现代实现…

2026/8/5 3:13:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制:SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰?想为心爱的游戏截图,却发现游戏不支持自定义分辨率…

2026/8/5 0:01:34

三升四,比成绩下滑更可怕的,是孩子开始「认命」

分水岭上,最难的不是翻过去,是孩子不想翻了。八月初了。这两个字,对三升四的家长来说,比任何闹钟都让人清醒。最近的家长群里,气氛明显不一样了。一升二的在关心兴趣班,二升三的在讨论要不要提前学英语。而…

2026/8/5 0:01:34

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:01:34

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/3 22:40:58

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/3 13:26:41

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/3 16:43:13

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…