快速比较JAVA中两个集合是否相等
有几个方法:
1)如果是不在乎顺序,只要内容相同就可以认为相等,则:
public <T extends Comparable<T>> boolean isEquals(List<T> list1, List<T> list2){
if (list1 == null && list2 == null) {
return true;
}
//Only one of them is null
else if(list1 == null || list2 == null) {
return false;
}
else if(list1.size() != list2.size()) {
return false;
}
//copying to avoid rearranging original lists
list1 = new ArrayList<T>(list1);
list2 = new ArrayList<T>(list2);
Collections.sort(list1);
Collections.sort(list2);
return list1.equals(list2);
}
如果LIST中没重复的元素,则可以:
public <T extends Comparable<T>> boolean isEquals(List<T> list1, List<T> list2){
if (list1 == null && list2 == null) {
return true;
}
//Only one of them is null
else if(list1 == null || list2 == null) {
return false;
}
else if(list1.size() != list2.size()) {
return false;
}
Set<T> set1 = new TreeSet<>(list1);
Set<T> set2 = new TreeSet<>(list2);
return set1.equals(set2);
}
但注意如果有重复的话,使用上面的方法则不行,比如:
List<Integer> list1 = Arrays.asList(
1
,
2
,
3
,
3
);
List<Integer> list2 = Arrays.asList(
3
,
1
,
2
,
2
);
System.out.println(list1.isEquals(list2));
上面会认为是元素相同,个数相同,但实际上明显不是严格的相等了,最好是用apache common包:
List<Integer> list1 = Arrays.asList(
1
,
2
,
3
,
3
);
List<Integer> list2 = Arrays.asList(
3
,
1
,
3
,
2
);
System.out.println(CollectionUtils.isEqualCollection(list1, list2));
//true
版权声明:本文为jackyrongvip原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。