2015-06-15 21 views
1

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

Array A 

[奇瑞,奇瑞,uindy,奇瑞,奇瑞]

Array B 

[奇瑞,uindy]

需要检查是否存在于数组值A可用在数组B或不。在上面的例子中,Array A中的所有值在Array B中都可用。请使用Java代码来解决这个问题。谢谢!

+0

看看ArrayUtils.contain() –

回答

4

您可以将阵列转换为List,然后使用containsAll方法,看是否有特定的列表包含在另一个列表中所描述的所有元素。

如果它们是Set s,您会得到更好的性能。

实施例:

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

我个人认为'Set'在这里更合适。至少把'firstList'改成'Set' –

+0

如果性能成为一个问题,那么是的,这是一个完全合理的做法。以上更具说明性,而不是复制粘贴的有效代码,但我会修改我的答案以包含转换为“Set”。 – Makoto

+1

刚刚看到了这个逻辑的一个缺陷:OP询问'数组A中存在的值是否可用于数组B',这意味着他正试图找出A和B的不同值,B是A的超集。你的回答是做相反的 –

0

字符串的数组:

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

数组是不这样做的好数据结构。 A Set比较好。因此,将您的两个阵列转换为Set对象,然后只需使用Set.equals()。或者在比较之前创建新对象,或者在任何地方使用Set

+0

对话应该实际上是转换他re =) –

+0

dunno downvote的原因,但这确实是这里最好的答案 –

+0

我会避开'Set#equals';不能保证平等的条件永远成立。如果一组是另一组的适当子集,那么它们不可能是等价的。 – Makoto

-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方法的AbstractSet

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

+0

设置等值不是这里最好的解决方案。显示的示例数据让你认为,但如果一个集合是另一个集合的正确子集(即A Makoto

1

在这个例子中,我使用整数,但也可以用于其他类型的小修改。 首先在阵列A元素上放置一个循环。

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

现在内部for循环进行另一个为环,其横向穿过环B的元素

for(int i =0; i<A.length(); i++) 
{ 
    for(int j=0; j<B.length();j++) 
     { 
      if(A[i] == B[j]) 
       { System.out.println("this element is in array A and B"); } 
     } 

} 

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

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(这是你的描述的行为基础)