ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

计算机学习笔记 ArrayList和HashMap的具体用法和代码示例

计算机学习笔记 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)查找效率适用场景频繁按索引访问、尾部追加快速按键查找、去重映射
返回列表