在 Java 中检查一个数组是否是另一个数组的子集

javaobject oriented programmingprogramming更新于 2024/11/19 14:36:17

在 Java 中,数组是一个对象。它是一种非原始数据类型,用于存储类似数据类型的值。

根据问题陈述,我们必须检查一个数组是否是另一个数组的子集。如果子数组的所有元素都存在于给定数组中,则数组是另一个数组的子集。

让我们探索这篇文章,看看如何使用 Java 编程语言来实现它。

向您展示一些实例

实例 1

假设原始数组为 array1 {33, 51, 5, 31, 9, 4, 3}
子数组为 array2 {51, 9, 33, 3}
检查原始数组是否包含子数组的所有元素后,结果将是:
array2 是 array1 的子集

实例 2

假设原始数组为 array1 {14, 11, 33, 2, 9, 1}
子数组为 array2 {11, 2, 7, 1}
检查原始数组是否包含子数组的所有元素后,结果将是:
array2 不是 array1 的子集

实例-3

假设原始数组为 array1 {8, 28, 41, 3, 29, 10}
子数组为 array2 {28, 10}
因此 array2 是 array1 的子数组

算法

算法-1(使用 2 个 for 循环)

  • 步骤 1 - 声明并初始化一个整数数组。

  • 步骤 2 - 实现多种方法的逻辑。

  • 步骤 3 - 初始化两个 for 循环并检查内层 for 循环的元素与外层 for 循环匹配。

  • 步骤 4 - 打印结果。

算法 2(使用 HashList)

  • 步骤 1 - 声明并初始化一个整数数组。

  • 步骤 2 - 实现多种方法的逻辑。

  • 步骤 3 - 初始化 hashset 并通过".contains(arr1[i])"检查子数组的元素是否存在于原始数组中。

  • 步骤 4 - 打印结果。

算法 3(使用 List)

  • 步骤 1 - 声明并初始化一个整数数组。

  • 步骤 2 - 实现多种方法的逻辑。

  • 步骤 3 - 初始化数组列表并检查子数组元素是否存在于原始数组中。

  • 步骤 4 - 打印结果。

语法

要获取数组的长度(该数组中的元素数),数组有一个内置属性,即 length。

下面引用它的语法 -

array.length

其中,"array"指的是数组引用。

多个方法

我们提供了不同方法的解决方案。

  • 使用 2 个 for 循环

  • 使用哈希

  • 使用 List.contains() 方法

让我们逐一查看程序及其输出。

方法 1:使用 2 个 for 循环

初始化两个 for 循环并检查内部 for 循环的元素是否与外部 for 循环匹配。然后根据算法检查一个数组是否是另一个数组的子集。

示例

public class Main {
   public static void main(String args[]) {
      int array1[] = { 33, 51, 5, 31, 9, 4, 3 };
      int array2[] = { 51, 9, 33, 3 };
      int x = array1.length;
      int y = array2.length;subset(array1, array2, x, y);
      if (subset(array1, array2, x, y)) {
         System.out.print("array 2 is a subset of array 1");
      } else {
         System.out.print("array 2 is not a subset of array 1");
      }
   }

   //用户定义方法来检查数组 2 是否存在于数组 1 中
   static boolean subset(int array1[], int array2[], int x, int y) {
      int i, j = 0;
      for (i = 0; i < y; i++) {
         for (j = 0; j < x; j++)
            if (array2[i] == array1[j])
               break;
         /* 当 arr2[i] 不存在于 arr1[] 中时返回 false */
         if (j == x)
            return false;
      }
      /* 当 arr2[] 的所有元素都存在于 arr1[] 中时返回 true */
      return true;
   }
}

输出

array 2 is a subset of array 1

方法 2:使用哈希算法

初始化哈希集,并通过".contains(arr1[i]"检查子数组元素是否存在于原始数组中。然后根据算法检查一个数组是否是另一个数组的子集。

示例

import java.util.HashSet;
public class Main {
   public static void main(String[] args) {

    //声明并初始化数组
    int arr1[] = { 14, 11, 33, 2, 9, 1 };
    int arr2[] = { 11, 2, 7, 1 };
    
    //获取数组的长度
      int x = arr1.length;
      int y = arr2.length;
      if (subset(arr1, arr2, x, y))
         System.out.println("array 2 is a subset of array 1 ");
      else
         System.out.println(
      "array 2 is not a subset of array 1");
   }
    /* 如果 arr2[] 是 arr1[] 的子集,则返回 true */
    static boolean subset(int arr1[], int arr2[], int x, int y) {
    
    //声明 hashset
    HashSet<Integer> hashset = new HashSet<>();
    
    // hashset 存储 arr1 的所有值
    for (int i = 0; i < x; i++) {
        if (!hashset.contains(arr1[i]))
        hashset.add(arr1[i]);
    }
    
    // for 循环检查 arr2 的所有元素是否也位于 arr1 中
    for (int i = 0; i < y; i++) {
        if (!hashset.contains(arr2[i]))
        /* 如果 arr2[i] 不存在于 arr1[] 中,则返回 false */
        return false;
    }
    /* 当 arr2[] 的所有元素都存在于 arr1[] 中时返回 true */
    return true;
    }
}

输出

array 2 is not a subset of array 1

方法 3:使用 List.contains() 方法

初始化数组列表并检查原始数组中是否存在子数组元素。然后根据算法检查一个数组是否是另一个数组的子集。

示例

import java.util.*;
public class Main {
   public static void main(String[] args) {
   
        //声明和初始化数组
        Integer arr1[] = { 8, 28, 41, 3, 29, 10 };
        Integer arr2[] = { 28, 10};
        
        //打印数组
        System.out.println("原始数组是 " + Arrays.toString(arr1));
        System.out.println("子数组是 " + Arrays.toString(arr2));
        
        //将数组转换为数组列表
        List<Integer> arr = new ArrayList<Integer>(Arrays.asList(arr1));
        
        // 使用 contains() 检查元素 28 是否存在
        boolean ans = arr.contains(28);
        
        //如果存在 28,则打印成功消息
        if (ans)
            System.out.println("数组 1 包含 28");
        else
            System.out.println("数组 1 不包含 28");
        
        // 使用 contains() 检查元素 10 是否存在
        ans = arr.contains(10);
        
        //如果存在 10,则打印成功消息
        if (ans)
            System.out.println("数组 1 包含 10");
        else
            System.out.println("数组 1 不包含 10");
        
        //打印数组 2 的所有元素是否都在数组 1 中
        System.out.println("因此数组 2 是数组 1 的子数组");
   }
}

输出

原始数组为 [8, 28, 41, 3, 29, 10]
子数组为 [28, 10]
数组 1 包含 28
数组 1 包含 10
因此数组 2 是数组 1 的子数组

在本文中,我们探讨了如何使用 Java 编程语言检查一个数组是否是另一个数组的子集。


相关文章


有用资源