Linly-Talker与达观数据大模型技术对接实录
2025/12/21 3:45:50
Java 集合框架( java.util 包)核心分为三大接口+工具类体系,适配不同数据存储与操作场景:
// 初始化与去重(保留原顺序)List<Integer>numList=newArrayList<>(Arrays.asList(5,2,8,2,9,1));List<Integer>distinctList=newArrayList<>(newLinkedHashSet<>(numList));// 结果:[5,2,8,9,1]// 排序(自然升序 + 自定义降序)Collections.sort(numList);// 自然升序排序numList.sort((a,b)->b-a);// 自定义降序排序// 条件过滤(移除偶数)numList.removeIf(num->num%2==0);// 子列表切片(左闭右开区间 [1,4))List<Integer>subList=numList.subList(1,4);Set<Integer>set1=newHashSet<>(Arrays.asList(1,2,3,4));Set<Integer>set2=newHashSet<>(Arrays.asList(3,4,5,6));// 并集:合并两个集合所有元素(自动去重)Set<Integer>unionSet=newHashSet<>(set1);unionSet.addAll(set2);// 结果:[1,2,3,4,5,6]// 交集:保留两个集合共有的元素Set<Integer>intersectSet=newHashSet<>(set1);intersectSet.retainAll(set2);// 结果:[3,4]// 差集:保留 set1 中有但 set2 中没有的元素Set<Integer>diffSet=newHashSet<>(set1);diffSet.removeAll(set2);// 结果:[1,2]// 1. 单词计数(利用 getOrDefault 避免空指针)String[]words={"apple","banana","apple","orange","banana","apple"};Map<String,Integer>countMap=newHashMap<>();for(Stringword:words){countMap.put(word,countMap.getOrDefault(word,0)+1);}// 2. 字母异位词分组(computeIfAbsent 自动创建空列表)String[]strs={"eat","tea","tan","ate","nat","bat"};Map<String,List<String>>groupMap=newHashMap<>();for(Strings:strs){char[]chars=s.toCharArray();Arrays.sort(chars);Stringkey=newString(chars);groupMap.computeIfAbsent(key,k->newArrayList<>()).add(s);}// 3. Lambda 表达式简化键值对遍历countMap.forEach((key,value)->System.out.println(key+":"+value+"次"));// Collections 工具类:反转列表、查找最值List<Integer>list=newArrayList<>(Arrays.asList(3,1,4,1,5));Collections.reverse(list);// 反转列表元素顺序intmax=Collections.max(list);// 获取列表最大值intmin=Collections.min(list);// 获取列表最小值// Arrays 工具类:数组排序、数组转 List、二分查找int[]arr={5,2,9,1};Arrays.sort(arr);// 对数组进行升序排序List<Integer>arrToList=newArrayList<>(Arrays.asList(1,2,3));// 数组转为可修改的 Listintidx=Arrays.binarySearch(arr,5);// 二分查找元素(数组需先排序)Java 集合框架的核心设计思路是“接口定义规范、实现类适配场景”,实战中需根据需求选择合适的实现类:去重选 HashSet、随机访问选 ArrayList、有序映射选 TreeMap。掌握 List/Set/Map 的高频函数与工具类用法,结合 Lambda 和 Stream 特性,可大幅提升代码编写效率。