【问题标题】:How to check if array a is part of array b in java? [duplicate]java - 如何检查数组a是否是java中数组b的一部分? [复制]
【发布时间】:2012-11-15 17:46:24
【问题描述】:

可能重复:
Check whether an array is a subset of another

我有数组a = { 1,4,3,5,1,2,3,6 } 和数组b= { 1,2,3 }

如何检查数组b 元素是否出现在数组a 中的任何位置?任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 这在O(n^2) 中是微不足道的。在O(n log n) 中也相对容易。你试过什么?
  • 仅供参考,在这里回答:stackoverflow.com/questions/1128723/…
  • 应该把元素放在一起还是b的每个元素都可以在a内的任何地方找到?
  • 您是否可以修改您的数组,特别是对它们进行排序?这些int[] 数组是原始类型,还是Integer[] 数组包含对象?后者适用于new HashSet(Arrays.asList(…)).containsAll(…)
  • @assylias,适用于 ArrayList 的方法不适用于原始元素类型的原始数组。

标签: java


【解决方案1】:

最简单的方法显然是使用内置函数。但是,Java 仅具有为 Collection 类型执行此操作的内置函数。如果数组不是原始类型,您可以这样做:

if (Arrays.asList(a).containsAll(Arrays.asList(b))) {
   //...
}

如果是原始数组(int[] 等),这仍然是最简单的方法,您只需手动将数组转换为列表或使用第三方库。 Guava has functions为此:

if ( Ints.asList(a).containsAll(Ints.asList(b)) ) {
   //...
}

【讨论】:

  • 谢谢,我将数组转换为列表,但仍然无法识别 Ints.asList,这是代码。 //将我们的数组转换为列表 List alist = (List) Arrays.asList(a); List blist = (List) Arrays.asList(b); if (Ints.asList(blist).containsAll(Ints.asList(a))) { System.out.print("yes"); }else System.out.print("no");
  • @user1172575 在评论中您说b 的元素应该在一起,但即使它们不在一起也会返回true。
  • @madth3,如果它们不在b中,它应该返回false,为什么即使它们没有返回true?
  • @user1172575:正如我在回答中所说,Ints.asList 是一个非常流行的第三方库 Guava 的函数。
【解决方案2】:

使用Apache Commons Lang:

for (Object element:b) {
    if (ArrayUtils.contains(a,element) == false) return false;
}
return true;

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 1970-01-01
    • 2019-01-06
    • 2021-09-15
    • 2018-05-08
    • 2021-01-20
    • 2012-03-31
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多