比较和匹配不同大小的数组

时间:2015-06-15 07:10:49

标签: java

我有几个不同大小的阵列;比方说,数组 A 和数组 B

Array A
[chery,chery,uindy,chery,chery]

Array B

[chery,uindy]

需要检查阵列A 中的值是否在阵列B 中可用。在上面的示例中,阵列A中的所有值都在Array B中可用。请使用Java代码来帮助解决这个问题。谢谢!

6 个答案:

答案 0 :(得分:4)

您可以将数组转换为List,然后使用containsAll方法查看特定列表是否包含其他列表中描述的所有元素。

如果它们是Set,你会得到更好的表现。

示例:

List<String> firstList = Arrays.asList("chery", "chery", "unid", ...);
List<String> secondList = Arrays.asList("chery", "unid", ...);

System.out.println(secondList.containsAll(firstList));

如果特别是这种方法的表现有点狡猾,那么请考虑将列表转换为Set而不是:

Set<String> firstSet = new HashSet<>(Arrays.asList("chery", "chery", "unid", ...));

答案 1 :(得分:1)

在示例中,我使用的是整数,但也可以用于其他类型,只需稍加修改即可。 首先在数组A元素上放置一个循环。

AbstractSet

现在在这个for循环中创建另一个for循环,它横穿循环B的元素。

for(int i =0; i<A.length(); i++)
{
    //this loop will transverse with all elements in array A.
}

现在,如果你想检查A的所有元素是否都在B中,你可以制作一个布尔值。只要你发现一个元素在两个数组中都不存在就可以退出,只要A中的每个元素在B中至少找到一次,这个布尔值就为真。

答案 2 :(得分:1)

根据您的要求,您将了解B是否为A的超集(我的意思是不同的值)。

这可以通过以下一行轻松完成:

String[] aArr = {.....};
String[] bArr = {.....};

return new HashSet<String>(Arrays.asList(bArr)).containsAll(Arrays.asList(aArr));

简而言之,将B设为Set,并检查B set是否包含A的所有值

所以,如果A = {Apple, Apple, Banana, Cherry}B = {Apple, Banana, Cherry, Pineapple},它将返回true(根据您的描述的行为)

答案 3 :(得分:0)

对于字符串数组:

for (String str : array1)
{
    System.out.println(ArrayUtils.contains(array2, str);
}

答案 4 :(得分:0)

数组不是一个很好的数据结构。 Set更好。因此,将两个数组转换为Set个对象,然后只使用Set.equals()。通过在比较之前创建新对象来进行转换,或者在任何地方使用Set

答案 5 :(得分:-1)

Set<String> setA = new HashSet<>(Arrays.asList(new String[]{"chery", "chery", "uindy", "chery", "chery"}));
Set<String> setB = new HashSet<>(Arrays.asList(new String[]{"chery", "uindy"}));

System.out.println("Sets are equal: " +setA.equals(setB));

equals的{​​{1}}方法说

  

将指定对象与此集进行相等性比较。返回true   如果给定对象也是一个集合,则这两个集合具有相同的大小,   并且给定集合中的每个成员都包含在此集合中。这个   确保equals方法在不同方面正常工作   Set接口的实现。此实现首先检查   如果指定的对象是这个集合;如果是这样,它返回true。然后,它   检查指定的对象是否是一个大小与之相同的集合   这套的大小;如果没有,则返回false。如果是,则返回   containsAll((Collection)o)。