Java数组的交集、并集

// 求两个数组的交集
public static int[] SameOfTwoArrays(int[] arr1, int[] arr2) {
  // 新建一个空数组,用于存储交集,空数组长度应该为两个数组中最小的。
  int temp[] = new int[arr1.length < arr2.length ? arr1.length : arr2.length];
  // 定义一个int的变量,初始值为0;用于交集数组的自增添加元素
  int k = 0;
  // 第一层for循环的作用是:遍历获取两个数组中的某一个元素。如果从效率上来处理,应该遍历较短的那个数组
  for (int i = 0; i < arr1.length; i++) {
    // 第二层for循环,遍历获取另一个数组的元素
    for (int j = 0; j < arr2.length; j++) {
      // 把两个数组中遍历出来的元素进行比较
      if (arr1[i] == arr2[j]) {
        // 如果两个元素相等,就存入交集数组中,交集数组的index需要自增长,以便存放下一个相等元素
        temp[k++] = arr1[i];
        // 把第二层循环中的当前找到的与第一层循环相等的元素位置存放如数组最后一个元素
        arr2[j] = arr2[arr2.length - 1];
        // 删除最后一个元素
        arr2 = Arrays.copyOf(arr2, arr2.length - 1);
        // 结束本次内循环
        break;
      }
    }
  }
  return Arrays.copyOf(temp, k);
}

// 求两个数组的并集

public static int[] mergeArrays(int[] arr1, int[] arr2) {

  // 新建一个空数组,用于存储交集,空数组长度应该为两个数组的长度之和。
  int[] temp = new int[arr1.length + arr2.length];

  //将两个数组拷贝到temp数组
  System.arraycopy(arr1, 0, temp, 0, arr1.length);
  System.arraycopy(arr2, 0, temp, arr1.length, arr2.length);

  //第一层循环,遍历到第一个数组的最后
  for (int i = 0; i < arr1.length; i++) {

    //第二层循环,从第二个数组开始遍历
    for (int j = arr1.length; j < temp.length; j++) {

      //如果第二个数组的元素等于第一个数组的元素,就删除第二个数组的该元素
      if (temp[i] == temp[j]) {

        //将第二个数组的元素放到temp数组的最后
        temp[j] = temp[temp.length - 1];

        //删除最后一个元素
        temp = Arrays.copyOf(temp, temp.length - 1);
        break;
      }
    }
  }
  Arrays.sort(temp);
  return temp;
}

 

posted @ 2017-11-10 14:39  何菇凉  阅读(5935)  评论(0编辑  收藏  举报