我有几个不同大小的阵列;比方说,数组 A 和数组 B 。
Array A
[chery,chery,uindy,chery,chery]
Array B
[chery,uindy]
需要检查阵列A 中的值是否在阵列B 中可用。在上面的示例中,阵列A中的所有值都在Array B中可用。请使用Java代码来帮助解决这个问题。谢谢!
答案 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)。