集合元素比对(忽略/不忽略顺序) 目录一、忽略顺序两个集合元素完全相同元素、数量都一致方案 1转成 List 排序后 equals简单通用方案 2计数 Map适合大数据、不用排序性能更好方案 3无重复元素场景 → 直接转 Set 判断二、不忽略顺序按存储顺序一一比对1. 有序集合LinkedHashMap严格按顺序判断2. 手动逐一遍历校验底层逻辑关键总结一、忽略顺序两个集合元素完全相同元素、数量都一致方案 1转成 List 排序后 equals简单通用import java.util.*; public class Test { public static void main(String[] args) { MapString, Integer map1 new HashMap(); MapString, Integer map2 new HashMap(); map1.put(a, 1); map1.put(b, 2); map2.put(x, 2); map2.put(y, 1); CollectionInteger values1 map1.values(); CollectionInteger values2 map2.values(); // 忽略顺序判断 boolean sameIgnoreOrder isSameIgnoreOrder(values1, values2); System.out.println(sameIgnoreOrder); } /** * 忽略顺序判断两个集合元素完全一致包含重复元素 */ public static T extends ComparableT boolean isSameIgnoreOrder(CollectionT c1, CollectionT c2) { // 长度不同直接不等 if (c1.size() ! c2.size()) { return false; } ListT list1 new ArrayList(c1); ListT list2 new ArrayList(c2); Collections.sort(list1); Collections.sort(list2); return list1.equals(list2); } }方案 2计数 Map适合大数据、不用排序性能更好处理存在重复数值场景精准匹配public static T boolean isSameByCount(CollectionT c1, CollectionT c2) { if (c1.size() ! c2.size()) return false; MapT, Integer count1 new HashMap(); MapT, Integer count2 new HashMap(); c1.forEach(e - count1.put(e, count1.getOrDefault(e, 0) 1)); c2.forEach(e - count2.put(e, count2.getOrDefault(e, 0) 1)); return count1.equals(count2); }方案 3无重复元素场景 → 直接转 Set 判断如果集合里没有重复数字最简写法new HashSet(values1).equals(new HashSet(values2));⚠️ 缺陷有重复元素会误判比如[1,1,2]和[1,2]会判定相等。二、不忽略顺序按存储顺序一一比对map.values()返回的集合实现HashMapvalues无序每次遍历顺序不固定无法严格比对顺序LinkedHashMapvalues有序插入顺序固定可以比对顺序1. 有序集合LinkedHashMap严格按顺序判断转 List 直接 equals// 不忽略顺序按遍历顺序逐一对比 boolean sameWithOrder new ArrayList(values1).equals(new ArrayList(values2));原理List.equals要求元素顺序、数量完全一致才返回 true。2. 手动逐一遍历校验底层逻辑public static T boolean isSameWithOrder(CollectionT c1, CollectionT c2) { if (c1.size() ! c2.size()) return false; IteratorT it1 c1.iterator(); IteratorT it2 c2.iterator(); while (it1.hasNext()) { if (!Objects.equals(it1.next(), it2.next())) { return false; } } return true; }关键总结忽略顺序、允许重复元素推荐少量数据排序 List 后 equals大量数据统计元素出现次数 Map 对比忽略顺序、无重复元素new HashSet(c1).equals(new HashSet(c2))不忽略顺序仅LinkedHashMap有效HashMap values 本身无序顺序不可控转 ArrayList 调用 equals 或迭代器逐元素比对