上面的六种方法的耗时时间依次是checkDiffrent5 < checkDiffrent1 < checkDiffrent2 < checkDiffrent < checkDiffrent3 < checkDiffrent4。所以最好的方法是使用list.sort()方法来进行排序,在用toString进行equal比较。
Security源代码地址:Security地址
附下我写的所有代码:
package list.demo;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;
* 判断两个集合是否相等
public class CheckDiffList implements Serializable {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
list.add("test" + i);
list1.add("test" + (i * 2));
System.out.println(checkDiffrent(list, list1));
* 方法一:使用循环遍历
private static boolean checkDiffrent(List<String> list, List<String> list1) {
long st = System.nanoTime();
if(list.size() != list1.size()) {
System.out.println("消耗时间:" + (System.nanoTime() - st));
return false;
for(String str : list) {
if(!list1.contains(str)) {
System.out.println("消耗时间:" + (
System.nanoTime() - st));
return false;
System.out.println("消耗时间:" + (System.nanoTime() - st));
return true;
* 方法2:利用List的 retainAll的方法进行判断
private static boolean checkDiffrent1(List<String> list, List<String> list1) {
long st = System.nanoTime();
System.out.println("消耗时间为:" + (System.nanoTime() - st));
return !list.retainAll(list1);
* 方法3
* 利用HashMap key唯一,value可以重复的特点,把list中各种元素放到hashMap中
private static boolean checkDiffrent2(List<String> list, List<String> list1) {
long st = System.nanoTime();
Map<String, Integer> map = new HashMap<>(list.size() + list1.size());
if (list.size() != list1.size()) {
System.out.println("消耗时间为: " + (System.nanoTime() - st));
return false;
for (String str : list) {
map.put(str, 1);
for (String str : list1) {
Integer cc = map.get(str);
if (null != cc) {
continue;
System.out.println("消耗时间为: " + (System.nanoTime() - st));
return false;
System.out.println("消耗时间为: " + (System.nanoTime() - st));
return true;
* md5加密法使用
* 方法4
private static boolean getDiffrent3(List<String> list, List<String> list1) {
long st = System.nanoTime();
String str = SecureUtil.md5(list.toString());
String str1 = SecureUtil.md5(list1.toString());
System.out.println("消耗时间为: " + (System.nanoTime() - st));
return str.equals(str1);
* 使用stream流去比较两个数组是否相等
* 方法5
private static boolean checkDiffrent4(List<String> list, List<String> list1) {
long st = System.nanoTime();
System.out.println("消耗时间为: " + (System.nanoTime() - st));
return list.stream().sorted().collect(Collectors.joining())
.equals(list1.stream().sorted().collect(Collectors.joining()));
* 使用list自带的sort方法先进性排序,然后转成toString去判断两个集合是否相等
* 方法6
private static boolean checkDiffrent5(List<String> list, List<String> list1) {
long st = System.nanoTime();
System.out.println("消耗时间为: " + (System.nanoTime() - st));
list.sort(Comparator.comparing(String::hashCode));
list1.sort(Comparator.comparing(String::hashCode));
return list.toString().equals(list1.toString());
Java如何判断两个集合的元素是否完全相等&nbsp;&nbsp;&nbsp;&nbsp;博主最近在工作的时候遇到了这样的一个需求,前端的页面提交一个表单数据,传到后台,我需要做判断这个表单和已有的表单数据是否有完全相同的,如果有相同的数据,那么就返回一个false,这一个表单不能被保存,如果不同,就可以保存到数据库中。一,实现1. 最简单粗暴的方法,遍历循环package list.d...
java 取交集方法retainAll
有两个集合A和B,判断这两个集合是否包含相同的对象或元素,可以使用retainAll方法:A.retainAll(B)。如果存在相同元素,A仅保留相同的元素。如果不存在相同元素,A会变为空。
总的来说:如果集合A和集合B是完全相同
以
List<String>为例,比较
List<String> columnName
List和
List<String> colTitle
List的内容
是否完全一致:
if (colTitle
List.containsAll(columnName
List) && columnName
List.containsAll(colTitle
List)) {
// ...
对比判断两个List内容是否相等应用场景关键字 containsAll() [kənˈteɪnz]注意事项代码示例contains() 方法用于判断字符串中是否包含指定的字符或字符串
当我们需要判断两个集合的内容是否相等时。
关键字 containsAll() [kənˈteɪnz]
用于检测 arraylist 是否包含指定集合中的所有元素。相同返回true , 不同返回false
我们在对比两个集合时需要特别注意两个集合的向后顺序,顺序不同导致返回结果不同。