java基础--集合--判断两个集合元素以及元素顺序是否相等

1 ListUtils.isEqualList

ListUtils.isEqualList(Collection<?> list1, Collection<?> list2)
import org.apache.commons.collections4.ListUtils;

Jar包地址

http://maven.outofmemory.cn/org.apache.commons/commons-collections4/4.0/

源码

public static boolean isEqualList(Collection<?> list1, Collection<?> list2) {
    if (list1 == list2) {
        return true;
    } else if (list1 != null && list2 != null && list1.size() == list2.size()) {
        Iterator<?> it1 = list1.iterator();
        Iterator<?> it2 = list2.iterator();
        Object obj1 = null;
        Object obj2 = null;

        while(true) {
            if (it1.hasNext() && it2.hasNext()) {
                obj1 = it1.next();
                obj2 = it2.next();
                if (obj1 == null) {
                    if (obj2 == null) {
                        continue;
                    }
                } else if (obj1.equals(obj2)) {
                    continue;
                }

                return false;
            }

            return !it1.hasNext() && !it2.hasNext();
        }
    } else {
        return false;
    }
}

2 containsAll  此方法不能判断顺序相等

 /**
 * @Author liuhaidong
 * @Description 方式2  containsAll  仅能判断内容,不能判断顺序
 * @param
 * @Date 11:42 2019/10/7 0007
 */
private static boolean isTrue(List<Integer> list1,List<Integer> list2){
    if(list1 == null && list2 == null){
        return true;
    }

    if(list1 != null && list1.containsAll(list2) &&
            list2 != null && list2.containsAll(list1)){
        return  true;
    }else {
        return false;
    }
}

3 contains  此方法不能判断顺序相等

/**
 * @Author liuhaidong
 * @Description 方式3 contains  仅能判断内容,不能判断顺序
 * @param
 * @Date 11:52 2019/10/7 0007
 */
public static boolean equals(List<Integer> listOne,List<Integer> listTwo) {
    if(listOne ==null || listTwo == null){
        return false;
    }
    int length = listOne.size();
    int count = 0;
    for(Integer a : listOne){
        if(listTwo.contains(a)){
            count +=1;
        }
    }
    if(count == length){
        return true;
    }
    return false;
}

4 retainAll  此方法不能判断顺序相等

//如果集合A和集合B是完全相同的集合,也会返回false。两个集合没有交集,才会返回true。简单来说,
// 判断两个集合是否有交集,有则返回false,无则返回true(这句话不严谨)。
// 总结来说只有两个任何一个元素都不相等时才会返回true,否则返回false。
System.out.println("*************************方式4  retainAll******************************");
System.out.println(!listOne.retainAll(listTwo));
System.out.println(!listOne.retainAll(listThree));

5 MD5

/**
 * md5加密法使用
 * 方法5  md5  能判断内容,能判断顺序
 */
private static boolean getDiffrent(List<Integer> list, List<Integer> list1) {
    /** 使用Security的md5方法进行加密 */
    Mademd5 md5 = new Mademd5();
    String str = md5.toMd5(list.toString());
    String str1 = md5.toMd5(list1.toString());
    return str.equals(str1);
}

6 使用list转成字符串进行比较是否相等

/**
     * @Author liuhaidong 
     * @Description 使用list转成字符串进行比较是否相等 使用list自带的sort方法先进行排序,然后转成toString去判断两个集合是否相等
     * 仅能判断内容,不能判断顺序
     * @param
     * @Date 12:21 2019/10/7 0007
     */
//    private static boolean ToSort(List<String> list, List<String> list1) {
//        list.sort(Comparator.comparing(String::hashCode));
//        list1.sort(Comparator.comparing(String::hashCode));
//        return list.toString().equals(list1.toString());
//    }
    private static boolean ToSort(List<Integer> list, List<Integer> list1) {
        list.sort(Comparator.comparing(Integer::intValue));
        list1.sort(Comparator.comparing(Integer::intValue));
        return list.toString().equals(list1.toString());
    }

7使用stream流去比较两个数组是否相等

/**
 * @Author liuhaidong 
 * @Description  使用stream流去比较两个数组是否相等
 * @param 
 * @Date 12:39 2019/10/7 0007
 */
private static boolean usingStream(List<Integer> list, List<Integer> list1) {
    List<String> newlist = new ArrayList<>(list.size());
    List<String> newList1 = new ArrayList<>(list1.size());
    for (Integer myInt : list) {
        newlist.add(String.valueOf(myInt));
    }
    for (Integer myInt1 : list1) {
        newList1.add(String.valueOf(myInt1));
    }
    /** 先将集合转成stream流进行排序然后转成字符串进行比较 */
    return newlist.stream().sorted().collect(Collectors.joining())
            .equals(newList1.stream().sorted().collect(Collectors.joining()));
}

结果

主函数

public static void main(String[] args) {
    List<Integer> listOne = new ArrayList<>();
    listOne.add(1);
    listOne.add(2);
    listOne.add(3);
    List<Integer> listTwo = new ArrayList<>();
    listTwo.add(3);
    listTwo.add(2);
    listTwo.add(1);
    List<Integer> listThree = new ArrayList<>();
    listThree.add(1);
    listThree.add(2);
    listThree.add(3);
    //方式1  引入jar包
    System.out.println("*************************方式1  collections4******************************");
    System.out.println(ListUtils.isEqualList(listOne,listTwo));
    System.out.println(ListUtils.isEqualList(listOne,listThree));
    //方式2  containsAll  此方法不能判断顺序相等
    System.out.println("*************************方式2  containsAll******************************");
    System.out.println(isTrue(listOne,listTwo));
    System.out.println(isTrue(listOne,listThree));
    //方式3 contains   此方法不能判断顺序相等
    System.out.println("*************************方式3  contains******************************");
    System.out.println(equals(listOne,listTwo));
    System.out.println(equals(listOne,listThree));
    //方式4 retainAll  此方法不能判断顺序相等
    //如果集合A和集合B是完全相同的集合,也会返回false。两个集合没有交集,才会返回true。简单来说,
    // 判断两个集合是否有交集,有则返回false,无则返回true(这句话不严谨)。
    // 总结来说只有两个任何一个元素都不相等时才会返回true,否则返回false。
    System.out.println("*************************方式4  retainAll******************************");
    System.out.println(!listOne.retainAll(listTwo));
    System.out.println(!listOne.retainAll(listThree));
    System.out.println("*************************方式5  md5方法进行加密******************************");
    System.out.println(getDiffrent(listOne,listTwo));
    System.out.println(getDiffrent(listOne,listThree));
    System.out.println("*************************方式6 转化为字符串进行排序Comparator.comparing******************************");
    System.out.println(ToSort(listOne,listTwo));
    System.out.println(ToSort(listOne,listThree));
    System.out.println("*************************方式7 使用stream流去比较两个数组是否相等******************************");
    System.out.println(usingStream(listOne,listTwo));
    System.out.println(usingStream(listOne,listThree));
}