news 2026/7/5 5:20:40

Java 集合框架(List, Set, Map)练习题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 集合框架(List, Set, Map)练习题

核心收获:熟练掌握 Java 集合框架(List, Set, Map)
‌练习1 — List 去重与保留顺序‌
移除列表中的重复元素并保持首次出现的顺序,使用 LinkedHashSet 构造函数或 Stream 的 distinct(),对比 HashSet 丢失顺序的场景。

//练习1:List去重与保留顺序//测试数据List<String>duplicateList=Arrays.asList("A","B","A","C","B","D","E","T","G","F","Y","G");//方法1:使用LinkedHashSet(底层基于插入顺序的哈希表,天然保序)List<String>distinctWithOrderOne=newArrayList<>(newLinkedHashSet<>(duplicateList));System.out.println("LinkedHashSet去重保序结果:"+distinctWithOrderOne);//方法2:使用Stream.distinct()(底层基于LinkedHashSet实现,同样保序)List<String>distinctWithOrderTwo=duplicateList.stream().distinct().collect(Collectors.toList());System.out.println("Stream.distinct()去重保序结果:"+distinctWithOrderTwo);//方法3:对比:普通HashSet会丢失插入顺序List<String>distinctNoOrder=newArrayList<>(newHashSet<>(duplicateList));System.out.println("HashSet去重丢失顺序结果:"+distinctNoOrder);//输出结果://LinkedHashSet去重保序结果:[A, B, C, D, E, T, G, F, Y]//Stream.distinct()去重保序结果:[A, B, C, D, E, T, G, F, Y]//HashSet去重丢失顺序结果:[A, B, C, D, E, F, G, T, Y]

‌练习2 — Map 安全获取与默认值‌
从 Map 中获取用户配置,若 Key 不存在则返回默认配置对象,使用 Map.getOrDefault() 或 computeIfAbsent() 避免空指针异常(NPE)。

//练习2:Map的安全获取与默认值//测试数据Map<String,String>userConfig=newHashMap<>();userConfig.put("theme","dark");userConfig.put("fontSize","16");//方法1:getOrDefault,仅查询不写入MapStringtheme=userConfig.getOrDefault("theme","light");StringunknownKey=userConfig.getOrDefault("unknownKey","defaultValue");System.out.println("theme配置:"+theme);System.out.println("不存在的key默认值:"+unknownKey);//方法2:computeIfAbsent,若key不存在则写入默认值到Map,后续直接复用StringcacheConfig=userConfig.computeIfAbsent("cacheExpire",k->"3600");System.out.println("新增的缓存配置:"+cacheConfig);System.out.println("Map最终内容:"+userConfig);//输出结果://theme配置:dark//不存在的key默认值:defaultValue//新增的缓存配置:3600//Map最终内容:{cacheExpire=3600, theme=dark, fontSize=16}

‌练习3 — 集合求交集与差集‌
找出两个用户标签列表(List)的共同标签(交集)和独有标签(差集),使用 retainAll() / removeAll() 或 Stream 的 filter + contains,注意大数据量下的性能优化(转为 HashSet 查找)。

//练习3集合求交集与差集//测试数据List<String>tagsOne=newArrayList<>(Arrays.asList("Java","Spring","AI","MySQL"));List<String>tagsTwo=newArrayList<>(Arrays.asList("Spring","Redis","Java","Kafka"));//性能优化:先转HashSet,将contains操作从O(n)降为O(1),适配大数据量场景Set<String>tagSetOne=newHashSet<>(tagsOne);Set<String>tagSetTwo=newHashSet<>(tagsTwo);//1:求交集(共同标签)Set<String>intersection=newHashSet<>(tagSetOne);intersection.retainAll(tagSetTwo);System.out.println("共同标签:"+intersection);//2:求差集(tagOne独有的标签)Set<String>difference=newHashSet<>(tagSetOne);difference.removeAll(tagSetTwo);System.out.println("tagOne独有的标签:"+difference);//3:Stream写法实现交集List<String>streamIntersection=tagsOne.stream().filter(tagSetTwo::contains).collect(Collectors.toList());System.out.println("Stream实现交集:"+streamIntersection);//4:Stream写法实现差集List<String>streamDifference=tagsOne.stream().filter(tag->!tagSetTwo.contains(tag)).collect(Collectors.toList());System.out.println("Stream实现差集:"+streamDifference);//输出结果//共同标签:[Java, Spring]//tagOne独有的标签:[MySQL, AI]//Stream实现交集:[Java, Spring]//Stream实现差集:[AI, MySQL]

‌练习4 — List 转 Map 分组与映射‌
将订单列表按“状态”分组统计总金额,使用 Collectors.groupingBy 嵌套 Collectors.summingDouble;或将列表直接转为 Map<ID, Object> 以便快速查找,使用 Collectors.toMap 并处理键冲突策略。

//练习4:List转Map分组与映射//测试数据List<Order>orders=Arrays.asList(newOrder(1L,1,99.9),newOrder(2L,1,199.9),newOrder(3L,2,299.9),newOrder(4L,2,399.9));//1:按订单状态分组,统计每个状态的总金额Map<Integer,Double>statusTotalMap=orders.stream().collect(Collectors.groupingBy(Order::status,Collectors.summingDouble(Order::amount)));System.out.println("按订单状态分组总金额:"+statusTotalMap);//2:转成ID-订单的快速查找Map,处理键冲突Map<Long,Order>idToOrderMap=orders.stream().collect(Collectors.toMap(Order::id,order->order,(oldVal,newVal)->oldVal));System.out.println("ID映射订单Map:"+idToOrderMap);//输出结果://按订单状态分组总金额:{1=299.8, 2=699.8}//ID映射订单Map:{1=Order[id=1, status=1, amount=99.9],// 2=Order[id=2, status=1, amount=199.9],// 3=Order[id=3, status=2, amount=299.9],// 4=Order[id=4, status=2, amount=399.9]}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 5:15:55

从数字化到暖心化:“盛情康养”解锁沈阳养老服务新范式

当数字化浪潮与银发民生需求深度交汇&#xff0c;一座城市的养老服务革新正在沈阳落地生根。累计保障超100万人次老人的公共服务&#xff0c;注册用户突破60000人&#xff0c;汇聚生态合作伙伴1200余家……一组组数据&#xff0c;是“盛情康养”上线一年来的扎实足迹&#xff0…

作者头像 李华
网站建设 2026/6/27 6:06:28

Java面试-08-分布式缓存Redis

Redis 面试题汇总 目录 一、基础与数据类型 1. Redis有哪些数据类型&#xff1f;底层实现和应用场景是什么&#xff1f;2. Redis常用的命令有哪些&#xff1f; 二、持久化 1. Redis提供了哪几种持久化方式&#xff1f;如何选择&#xff1f; 三、高性能与线程模型 1. Redis为什…

作者头像 李华
网站建设 2026/6/27 6:03:04

矢量网络分析仪测量实用指南

矢量网络分析仪&#xff08;VNA&#xff09;是射频与微波领域中不可或缺的核心测试设备&#xff0c;广泛应用于天线、放大器、滤波器等器件的性能评估。其核心优势在于不仅能测量S参数的幅度&#xff0c;还能精确捕捉相位信息&#xff0c;从而提供全面的网络响应分析。现代VNA虽…

作者头像 李华
网站建设 2026/6/27 6:00:35

轻养新风席卷中秋 鲜品屋2026新品发布会圆满举办

仲夏洛城&#xff0c;荷风送香&#xff0c;中秋消费赛道的产业端备战已率先拉开帷幕。6月23日&#xff0c;臻味集团2026年鲜品屋中秋新品发布会于洛阳伊水大酒店正式举办&#xff0c;本次大会以“新式开创 健康引领”为核心主题&#xff0c;汇聚行业专家、全国经销商伙伴与各界…

作者头像 李华
网站建设 2026/6/27 5:56:19

厦门市铧大技术学校打造“AI+”全专业职教新高地

在“数字福建”战略纵深推进与AI技术狂飙突进的时代&#xff0c;传统职业教育正面临“技术迭代快、岗位需求变”的双重挑战。未来职场需要的&#xff0c;绝非单一工种的熟练工&#xff0c;而是具备AI思维、能驾驭前沿工具、能解决实际问题的复合型数智人才。 厦门市铧大技术学…

作者头像 李华
网站建设 2026/6/27 5:51:18

2026年免漆吸塑厂家选择指南:这3点最关键

在工业制造与商业展示领域&#xff0c;厚片吸塑 因其轻量化、造型灵活、成本可控等优势&#xff0c;正从传统的包装领域向设备外壳、展示道具、汽车内饰等重型应用场景快速渗透。随着2026年市场对环保、效率与定制化的要求持续升级&#xff0c;企业在选择 厚片吸塑 加工合作伙伴…

作者头像 李华