一、引言1.为什么这些是 Java 基础的重点ArrayList、HashMap 和泛型是Java集合框架的核心组成部分广泛应用于实际开发中。ArrayList基于动态数组实现支持快速随机访问适合频繁查询和遍历的场景。HashMap基于哈希表实现提供高效的键值对存储和检索适合快速查找和数据映射。泛型提供类型安全避免运行时类型转换错误增强代码的可读性和复用性。2.它们在实际开发中的应用场景动态数据存储当数据量不确定且需要频繁增删时ArrayList比数组更灵活。快速访问通过索引直接访问元素适合需要高频读取的场景如缓存。集合操作与Collections工具类配合实现排序、查找等操作如排行榜列表。二、ArrayList 详解1. 什么是 ArrayListArrayList 是 Java 集合框架中的一个动态数组实现属于java.util包。它基于数组实现支持动态扩容和随机访问适合频繁查询和遍历的场景但插入和删除操作效率较低。2.核心特性动态扩容初始容量默认为 10当元素数量超过当前容量时自动扩容至原来的 1.5 倍JDK 1.8。有序性保持元素的插入顺序。允许重复元素和 null 值。非线程安全多线程环境下需手动同步或使用Collections.synchronizedList包装。// 创建 ArrayList ArrayListString list new ArrayList(); // 添加元素 list.add(A); // 末尾添加 list.add(1, B); // 指定索引插入 // 访问元素 String element list.get(0); // 获取索引 0 的元素 // 删除元素 list.remove(0); // 按索引删除 list.remove(B); // 按值删除首次出现 // 其他操作 int size list.size(); // 元素数量 boolean isEmpty list.isEmpty(); // 是否为空 list.clear(); // 清空列表3.与数组对比特性ArrayList数组Array长度动态可变固定内存管理自动扩容/缩容手动管理三、HashMap详解1.什么是HashMapHashMap 是 Java 中基于哈希表的 Map 接口实现用于存储键值对key-value pairs。它允许使用 null 键和 null 值并且是非线程安全的。2.常用方法put(K key, V value)插入键值对。get(Object key)根据键获取值。remove(Object key)删除指定键的映射。containsKey(Object key)检查是否包含指定键。例子HashMapString, Integer map new HashMap(); map.put(apple, 10); map.put(banana, 20); System.out.println(map.get(apple)); // 输出 103.注意事项键对象必须正确实现hashCode()和equals()方法。初始容量和负载因子需根据实际场景调整以减少扩容开销。Java 8 后引入红黑树优化显著提升了哈希冲突时的性能。四、泛型详解1.什么是泛型泛型Generics是编程语言中用于增强代码复用性和类型安全的一种机制。允许在定义类、接口或方法时使用类型参数实际使用时再指定具体类型。泛型的主要目的是在编译时检测类型错误减少运行时类型转换的风险。2.泛型的优势类型安全编译时检查类型匹配避免运行时类型转换错误。代码复用同一套逻辑可适用于多种数据类型减少重复代码。可读性明确代码中使用的数据类型提高代码可维护性。3.泛型的基本语法泛型类public class BoxT { private T content; public void setContent(T content) { this.content content; } public T getContent() { return content; } }T是类型参数使用时可以替换为具体类型如Integer、String。泛型方法public T void printArray(T[] array) { for (T element : array) { System.out.println(element); } }方法声明中的T表示泛型类型可在方法参数和返回值中使用。泛型接口public interface ListT { void add(T item); T get(int index); }泛型的通配符?无界通配符表示未知类型例如List?。? extends T上界通配符表示类型为T或其子类。? super T下界通配符表示类型为T或其父类。4.泛型的限制类型擦除Java泛型在编译后会擦除类型信息运行时无法获取泛型的具体类型。不能实例化泛型类型例如new T()是非法的。不能用于静态上下文静态方法或变量不能使用类的泛型类型参数。5.泛型的应用场景集合框架如ArrayListT、HashMapK,V。工具类通用算法或数据处理逻辑。回调接口如ComparatorT。五、例题与答案1.## 练习题 1ArrayList 去重题目 去除 ArrayList 中的重复元素ArrayListInteger list new ArrayList();list.add(1);list.add(2);list.add(2);list.add(3);list.add(3);list.add(3);// 去除重复后应该变成: [1, 2, 3]答案package test5_21; import java.util.ArrayList; import java.util.HashSet; public class test2 { //去除arraylist中重复的元素 //ArrayListInteger list new ArrayList(); //list.add(1); //list.add(2); //list.add(2); //list.add(3); //list.add(3); //list.add(3); // //// 去除重复后应该变成: [1, 2, 3] public static void main(String[] args) { ArrayListInteger list new ArrayList(); list.add(1); list.add(2); list.add(2); list.add(3); list.add(3); list.add(3); // 去重核心代码 //List 元素存入 HashSet依托集合特性自动剔除重复值 //清空原列表原有数据 //把去重后的元素回填回 List HashSetInteger set new HashSet(list); list.clear(); list.addAll(set); System.out.println(list); } }2.//## 练习题 2HashMap 统计单词出现次数//题目 统计一句话中每个单词出现的次数//String str hello java hello world java java;// 预期结果:// hello 出现了 2 次// java 出现了 3 次// world 出现了 1 次package test5_23; import java.util.HashMap; import java.util.Map; public class test1 { public static void main(String[] args) { String str hello java hello world java java; HashMapString, Integer map new HashMap(); // 按空格拆分单词 String[] words str.split( ); for (String word : words) { // 单词不存在默认0存在则取值次数1 int count map.getOrDefault(word, 0); map.put(word, count 1); } // 遍历输出结果 for (Map.EntryString,Integer entry : map.entrySet()) { System.out.println(entry.getKey() entry.getValue() 次); } } }
《Java 基础必学:ArrayList、HashMap 和泛型详解》
发布时间:2026/5/24 1:33:18
一、引言1.为什么这些是 Java 基础的重点ArrayList、HashMap 和泛型是Java集合框架的核心组成部分广泛应用于实际开发中。ArrayList基于动态数组实现支持快速随机访问适合频繁查询和遍历的场景。HashMap基于哈希表实现提供高效的键值对存储和检索适合快速查找和数据映射。泛型提供类型安全避免运行时类型转换错误增强代码的可读性和复用性。2.它们在实际开发中的应用场景动态数据存储当数据量不确定且需要频繁增删时ArrayList比数组更灵活。快速访问通过索引直接访问元素适合需要高频读取的场景如缓存。集合操作与Collections工具类配合实现排序、查找等操作如排行榜列表。二、ArrayList 详解1. 什么是 ArrayListArrayList 是 Java 集合框架中的一个动态数组实现属于java.util包。它基于数组实现支持动态扩容和随机访问适合频繁查询和遍历的场景但插入和删除操作效率较低。2.核心特性动态扩容初始容量默认为 10当元素数量超过当前容量时自动扩容至原来的 1.5 倍JDK 1.8。有序性保持元素的插入顺序。允许重复元素和 null 值。非线程安全多线程环境下需手动同步或使用Collections.synchronizedList包装。// 创建 ArrayList ArrayListString list new ArrayList(); // 添加元素 list.add(A); // 末尾添加 list.add(1, B); // 指定索引插入 // 访问元素 String element list.get(0); // 获取索引 0 的元素 // 删除元素 list.remove(0); // 按索引删除 list.remove(B); // 按值删除首次出现 // 其他操作 int size list.size(); // 元素数量 boolean isEmpty list.isEmpty(); // 是否为空 list.clear(); // 清空列表3.与数组对比特性ArrayList数组Array长度动态可变固定内存管理自动扩容/缩容手动管理三、HashMap详解1.什么是HashMapHashMap 是 Java 中基于哈希表的 Map 接口实现用于存储键值对key-value pairs。它允许使用 null 键和 null 值并且是非线程安全的。2.常用方法put(K key, V value)插入键值对。get(Object key)根据键获取值。remove(Object key)删除指定键的映射。containsKey(Object key)检查是否包含指定键。例子HashMapString, Integer map new HashMap(); map.put(apple, 10); map.put(banana, 20); System.out.println(map.get(apple)); // 输出 103.注意事项键对象必须正确实现hashCode()和equals()方法。初始容量和负载因子需根据实际场景调整以减少扩容开销。Java 8 后引入红黑树优化显著提升了哈希冲突时的性能。四、泛型详解1.什么是泛型泛型Generics是编程语言中用于增强代码复用性和类型安全的一种机制。允许在定义类、接口或方法时使用类型参数实际使用时再指定具体类型。泛型的主要目的是在编译时检测类型错误减少运行时类型转换的风险。2.泛型的优势类型安全编译时检查类型匹配避免运行时类型转换错误。代码复用同一套逻辑可适用于多种数据类型减少重复代码。可读性明确代码中使用的数据类型提高代码可维护性。3.泛型的基本语法泛型类public class BoxT { private T content; public void setContent(T content) { this.content content; } public T getContent() { return content; } }T是类型参数使用时可以替换为具体类型如Integer、String。泛型方法public T void printArray(T[] array) { for (T element : array) { System.out.println(element); } }方法声明中的T表示泛型类型可在方法参数和返回值中使用。泛型接口public interface ListT { void add(T item); T get(int index); }泛型的通配符?无界通配符表示未知类型例如List?。? extends T上界通配符表示类型为T或其子类。? super T下界通配符表示类型为T或其父类。4.泛型的限制类型擦除Java泛型在编译后会擦除类型信息运行时无法获取泛型的具体类型。不能实例化泛型类型例如new T()是非法的。不能用于静态上下文静态方法或变量不能使用类的泛型类型参数。5.泛型的应用场景集合框架如ArrayListT、HashMapK,V。工具类通用算法或数据处理逻辑。回调接口如ComparatorT。五、例题与答案1.## 练习题 1ArrayList 去重题目 去除 ArrayList 中的重复元素ArrayListInteger list new ArrayList();list.add(1);list.add(2);list.add(2);list.add(3);list.add(3);list.add(3);// 去除重复后应该变成: [1, 2, 3]答案package test5_21; import java.util.ArrayList; import java.util.HashSet; public class test2 { //去除arraylist中重复的元素 //ArrayListInteger list new ArrayList(); //list.add(1); //list.add(2); //list.add(2); //list.add(3); //list.add(3); //list.add(3); // //// 去除重复后应该变成: [1, 2, 3] public static void main(String[] args) { ArrayListInteger list new ArrayList(); list.add(1); list.add(2); list.add(2); list.add(3); list.add(3); list.add(3); // 去重核心代码 //List 元素存入 HashSet依托集合特性自动剔除重复值 //清空原列表原有数据 //把去重后的元素回填回 List HashSetInteger set new HashSet(list); list.clear(); list.addAll(set); System.out.println(list); } }2.//## 练习题 2HashMap 统计单词出现次数//题目 统计一句话中每个单词出现的次数//String str hello java hello world java java;// 预期结果:// hello 出现了 2 次// java 出现了 3 次// world 出现了 1 次package test5_23; import java.util.HashMap; import java.util.Map; public class test1 { public static void main(String[] args) { String str hello java hello world java java; HashMapString, Integer map new HashMap(); // 按空格拆分单词 String[] words str.split( ); for (String word : words) { // 单词不存在默认0存在则取值次数1 int count map.getOrDefault(word, 0); map.put(word, count 1); } // 遍历输出结果 for (Map.EntryString,Integer entry : map.entrySet()) { System.out.println(entry.getKey() entry.getValue() 次); } } }