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

     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));
}

 

全部评论

相关推荐

12-27 22:29
门头沟学院 Java
点赞 评论 收藏
分享
最近群里有很多同学找我看简历,问问题,主要就是集中在明年三月份的暑期,我暑期还能进大厂嘛?我接下来该怎么做?对于我来说,我对于双非找实习的一个暴论就是title永远大于业务,你在大厂随随便便做点慢SQL治理加个索引,可能就能影响几千人,在小厂你从零到一搭建的系统可能只有几十个人在使用,量级是不一样的。对双非来说,最难的就是约面,怎么才能被大厂约面试?首先这需要一点运气,另外你也需要好的实习带给你的背书。有很多双非的同学在一些外包小厂待了四五个月,这样的产出有什么用呢?工厂的可视化大屏业务很广泛?产出无疑是重要的,但是得当你的实习公司到了一定的档次之后,比如你想走后端,那么中厂后端和大厂测开的选择,你可以选择中厂后端(注意,这里的中厂也得是一些人都知道的,比如哈啰,得物,b站之类,不是说人数超过500就叫中厂),只有这个时候你再去好好关注你的产出,要不就无脑大厂就完了。很多双非同学的误区就在这里,找到一份实习之后,就认为自己达到了阶段性的任务,根本不再投递简历,也不再提升自己,玩了几个月之后,美其名曰沉淀产出,真正的好产出能有多少呢?而实际上双非同学的第一份实习大部分都是工厂外包和政府外包!根本无产出可写😡😡😡!到了最后才发现晚了,所以对双非同学来说,不要放过任何一个从小到中,从中到大的机会,你得先有好的平台与title之后再考虑你的产出!因为那样你才将将能过了HR初筛!我认识一个双非同学,从浪潮到海康,每一段都呆不久,因为他在不断的投递和提升自己,最后去了美团,这才是双非应该做的,而我相信大部分的双非同学,在找到浪潮的那一刻就再也不会看八股,写算法,也不会打开ssob了,这才是你跟别人的差距。
迷茫的大四🐶:我也这样认为,title永远第一,只有名气大,才有人愿意了解你的简历
双非本科求职如何逆袭
点赞 评论 收藏
分享
11-07 16:07
深圳大学 运营
前端飞升:学长,阿里不是卡双非吗,我深也能去吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务