集合能大幅简化代码、提升效率尤其是处理动态数据、快速查找、优先级处理等场景在java中集合框架分为两大体系单列集合List、Set存储单个元素双列集合Map存储键值对只需要掌握高频实用的5种即可ArrayList、HashSet、HashMap、Deque栈 / 队列。1. ArrayList动态数组核心作用替代普通数组解决普通数组长度固定的问题竞赛中处理动态增长的列表比如存储输入数据、结果集。优势随机访问快O (1)增删尾部元素快O (1)适合需要频繁读取、尾部修改的场景。核心语法importjava.util.ArrayList;importjava.util.Collections;publicclassMain{publicstaticvoidmain(String[]args){// 1. 初始化ArrayListIntegerlistnewArrayList();// 2. 增添加元素尾部/指定位置list.add(5);// 尾部添加[5]list.add(0,3);// 索引0添加[3,5]list.addAll(list);// 批量添加[3,5,3,5]// 3. 删按索引/元素删除list.remove(1);// 删除索引1的元素[3,3,5]list.remove(Integer.valueOf(3));// 删除第一个值为3的元素[3,5]// 4. 查按索引/判断存在intvallist.get(1);// 获取索引1的元素5booleanhas5list.contains(5);// 判断是否包含5trueintindexlist.indexOf(3);// 找元素3的第一个索引0// 5. 改修改指定索引元素list.set(0,10);// [10,5]// 6. 遍历竞赛常用两种方式// 方式1普通for需要索引时用for(inti0;ilist.size();i){System.out.print(list.get(i) );}// 方式2增强for仅遍历for(intnum:list){System.out.print(num );}// 7. 竞赛高频操作排序、反转、清空Collections.sort(list);// 升序排序[5,10]Collections.reverse(list);// 反转[10,5]list.clear();// 清空集合}}2. HashSet无序不重复集合核心作用快速去重、快速判断元素是否存在O (1)竞赛中常用于 “判重”“统计唯一元素” 场景比如判断数组是否有重复元素、找两个数组的交集。核心特点无序、无重复、允许 null但竞赛中少用 null底层是哈希表。核心语法importjava.util.HashSet;importjava.util.Set;publicclassMain{publicstaticvoidmain(String[]args){// 1. 初始化SetIntegersetnewHashSet();// 2. 增添加元素重复元素自动忽略set.add(1);set.add(2);set.add(1);// 重复不会添加// 3. 删删除元素set.remove(2);// 删除值为2的元素// 4. 查判断元素是否存在竞赛最常用booleanhas1set.contains(1);// truebooleanhas3set.contains(3);// false// 5. 遍历无索引只能增强forfor(intnum:set){System.out.print(num );// 输出1}// 6. 竞赛高频转数组/集合Integer[]arrset.toArray(newInteger[0]);// 转数组ArrayListIntegerlistnewArrayList(set);// 转ArrayList// 7. 清空/长度intsizeset.size();// 1set.clear();}}3. HashMap键值对映射核心作用通过 “键” 快速找 “值”O (1)竞赛中常用于 “统计频次”“映射关系”比如统计数组中每个元素出现的次数、字符串字符计数。核心特点键唯一、值可重复无序。核心语法importjava.util.HashMap;importjava.util.Map;publicclassMain{publicstaticvoidmain(String[]args){// 1. 初始化键字符串值出现次数MapString,IntegermapnewHashMap();// 2. 增/改put键存在则改值不存在则新增map.put(a,1);map.put(b,2);map.put(a,3);// 键a已存在值改为3// 3. 查get键不存在返回nullintcountAmap.get(a);// 3intcountCmap.getOrDefault(c,0);// 键c不存在返回默认值0竞赛必用避免NullPointerException// 4. 判是否包含键/值booleanhasKeyAmap.containsKey(a);// truebooleanhasValue2map.containsValue(2);// false因为b的值被删了不上面b的值是2还在// 5. 删删除键值对map.remove(b);// 删除键为b的键值对// 6. 遍历竞赛两种常用方式// 方式1遍历所有键最常用for(Stringkey:map.keySet()){intvaluemap.get(key);System.out.println(key:value);// a:3}// 方式2遍历键值对for(Map.EntryString,Integerentry:map.entrySet()){Stringkeyentry.getKey();intvalueentry.getValue();System.out.println(key:value);}// 7. 大小/清空intsizemap.size();// 1map.clear();}}4. Deque双端队列替代 Stack/Queue核心作用既可以当栈后进先出也可以当队列先进先出竞赛中替代StackStack是旧类效率低用于 DFS栈、BFS队列。优势效率高、功能全。核心语法importjava.util.Deque;importjava.util.LinkedList;publicclassMain{publicstaticvoidmain(String[]args){DequeIntegerdequenewLinkedList();// 1. 当队列用FIFO尾部加头部取deque.offer(1);// 尾部添加deque.offer(2);intqHeaddeque.poll();// 取出头部1// 2. 当栈用LIFO头部加头部取替代Stackdeque.push(3);// 头部添加等价于addFirstdeque.push(4);intsTopdeque.pop();// 取出头部4等价于pollFirst// 3. 查头部/尾部不删除intpeekHeaddeque.peek();// 头部3intpeekTaildeque.peekLast();// 尾部2}}