判断两个list 或两个数组的内容是否是相同

本文介绍了在Java中如何判断两个列表内容是否相同,以及数组内容是否相等。通过使用containsAll方法和equals方法,可以实现无序列表的比较。同时,文章还探讨了数组相等的条件,并提供了Arrays.equals方法的示例。
摘要由CSDN通过智能技术生成

一、判断两个list的内容是否是相同

1、剪枝条件对应添加的位置

剪枝条件对应添加的位置——在dfs()函数中,在递归调用前剪枝(最前面)。

剪枝条件

//条件一:item_table.containsKey(temp)   条件二:item_table.get(temp).support < Info.min_sup
    if(item_table.containsKey(temp) && item_table.get(temp).support < Info.min_sup){
   		return;
    }

另一种写法

 if(item_table.getOrDefault(temp,Info.min_sup)<Info.min_sup){
 	return;
 }

注意类型要匹配哦!

2、判断两个list的内容是否是相同

在判断两个list内容是否相同时,经常时比较地址,而非内容。
比如

  //进行的是地址判重而非内容判重
   if(item_table.containsKey(can_item)){
      return;
   }

而 HashMap 又是内部类,不方便重写hashode() 和 equals()方法。所以,如何判断两个list中的内容是否相同呢?

首先介绍一下别人的方法

//判断的方法list
private boolean isListEqual(List<String> l0, List<String> l1) {
		boolean flag1 = l0.containsAll(l1);
		boolean flag2 = l1.containsAll(l0);
		return flag1 && flag2;
	}

写个demo来调用

@Test
	public void test02() {
		String s = "0,1,2,3,4";
		List<String> s1 = Arrays.asList(s.split(","));
		String b = "1,2,3,4,0,";
		List<String> s2 = Arrays.asList(b.split(","));
		boolean flag = this.isListEqual(s1, s2);
		System.out.println("==============>>>>>>>>>" + flag);
	}

控制台显示运行结果:true

原文链接:https://blog.csdn.net/Odada1710/article/details/84324205

接下来运用到自己的算法函数中

/**
     * @Description:  判断两个list内容是否相同(无序)
     * @input:
     *      item_table 存放项集信息的列表
     *      can_item 新生成并输入的项集
     ***************************************************
     *   在进行操作时,比较can_item是否包含在item_table的 keyset()中,
     *   也就是判断item_table中是否已经包含有can_item这个项的信息
     * @return:
     *     ture: item_table包含can_item(两个list相同);
     *     false:item_table不包含can_item(两个list不相同)。
     */
     public boolean judge(HashMap<ArrayList<Integer>, ItemTable> item_table, ArrayList<Integer> can_item){
        //判断两个list内容是否相同(无序)
        for(ArrayList<Integer> can_item_temp : item_table.keySet()){
//            if(can_item_temp.stream().allMatch()){
            if(can_item_temp.containsAll(can_item)&&can_item.containsAll(can_item_temp)){
                return true;
            }
        }
        return false;
    }

3、实际应用补充

/* TODO 【test6】比较两个list的内容是否相等 */
    public static void test6(){
        ArrayList<Integer> list1 = new ArrayList<>();
        ArrayList<Integer> list2 = new ArrayList<>();
        ArrayList<Integer> list3 = new ArrayList<>();

        //无内容时
        System.out.println("list1.equals(list2) : " + list1.equals(list2));  //true
        System.out.println("list3.equals(list2) : " + list1.equals(list3));  //true

        list1.add(1);  list1.add(2);  list1.add(3);
        list2.add(1);  list2.add(2);  list2.add(3);
        list2.add(2);  list2.add(1);  list2.add(3);

        //有内容时,比较地址
        System.out.println("list1.equals(list2) : " + list1.equals(list2));  //false
        System.out.println("list3.equals(list2) : " + list1.equals(list3));  //false

        //list1.containsAll(list2) && list2.containsAll(list1)) : 无顺序
        System.out.println("list1.containsAll(list2) && list2.containsAll(list1) : " + (list1.containsAll(list2) && list2.containsAll(list1)));  //true
        System.out.println("list1.containsAll(list3) && list1.containsAll(list3) : " + (list1.containsAll(list3) && list1.containsAll(list3)));  //true

        //list元素存在重复
        ArrayList<Integer> list4 = new ArrayList<>();
        list4.add(1);  list4.add(2);  list4.add(3);  list4.add(3);
        ArrayList<Integer> list5 = new ArrayList<>();
        list5.add(3);  list5.add(1);  list5.add(2);  list5.add(2);
        System.out.println("list1.containsAll(list4) && list2.containsAll(list5) : " + (list1.containsAll(list4) && list2.containsAll(list5)));  //true
        System.out.println("list1.containsAll(list4) && list2.containsAll(list1) : " + (list1.containsAll(list4) && list2.containsAll(list1)));  //true

二、判断两个数组的内容是否是相同

数组相等的条件为:
1.数组元素个数相等
2.两个数组对应位置的元素也相等

Arrays.equals(int[]a1, int[]a2);

	int[] a1 ={12, 56, 42};
 	int[] a2 =new int[3]; //元素相同,顺序相同
    a2[0] = 12;
    a2[1] = 56;
    a2[2] = 42;
    int[] a3 = {42, 56, 12}; //a3元素和a1相同,顺序不同
    
    System.out.println(Arrays.equals(a1, a2));  //true
    System.out.println(Arrays.equals(a1, a3)); //flase
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值