diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java index fa94976ed..9f46e9254 100755 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java @@ -365,11 +365,18 @@ public class CollUtil { */ public static Collection subtract(Collection coll1, Collection coll2) { Collection result = ObjectUtil.clone(coll1); - if (null == result) { - result = CollUtil.create(coll1.getClass()); + try { + if (null == result) { + result = CollUtil.create(coll1.getClass()); + result.addAll(coll1); + } + result.removeAll(coll2); + } catch (UnsupportedOperationException e){ + // 针对 coll1 为只读集合的补偿 + result = CollUtil.create(AbstractCollection.class); result.addAll(coll1); + result.removeAll(coll2); } - result.removeAll(coll2); return result; }