如果在两个数组中计算元素

时间:2013-12-16 15:46:47

标签: java arrays

有没有可能比较没有两个循环的两个数组? 我有两个带字符串的数组,需要计算相等元素的数量。 (数组的长度可以不同)

5 个答案:

答案 0 :(得分:3)

假设每个数组中的所有元素都是唯一的:

String[] a ={"A","B", "E"};
String[] b={"A","B","C", "D", "E"};

Set<String> set = new HashSet<String>();
set.addAll(Arrays.asList(a));
set.addAll(Arrays.asList(b));

System.out.println("nb of equal elements "+ (a.length + b.length - set.size()));

如果每个数组中的元素不唯一,请为两个数组创建一个中间集。

答案 1 :(得分:1)

喜欢这个

String[] a ={"A","B"};
String[] b={"A","B","C"};
List<String> list=new ArrayList<String>();
list.addAll(Arrays.asList(a));
list.retainAll(Arrays.asList(b));
System.out.println(list);
System.out.println("equal elements:"+list.size());

<强>输出

[A, B]
equal elements:2

答案 2 :(得分:0)

您可以使用Arrays.asList(...).contains(...),并为每个“true”结果增加一个计数器(cont++);

希望它有所帮助!

答案 3 :(得分:0)

基本上没有。您必须使用至少两个嵌套循环(forwhiledo-while)或其他技术,如模仿循环的递归方法,但最后您将使用两个。即使您使用List#contains(如RafaRomero's answer中所述),您也会使用两个嵌套循环,而不是显式,但它们就在那里。

另一个选项可能是使用Set<String>来存储String,如果该元素已经在Set,那么您的计数器将添加1个值。请注意,此替代方法将使用两个非嵌套循环:

public int countEqualElements(String[] yourFirstStringArray, String[] yourSecondStringArray) {
    Set<String> mainData = new HashSet<String>();
    int counter = 0;
    for (String string : yourFirstStringArray) {
        mainData.add(string);
    }
    for (String string : yourSecondStringArray) {
        if (!mainData.add(string)) {
            counter++;
        }
    }
    return counter;
}

答案 4 :(得分:0)

在Collection中使用set方法(唯一值)

    String[] arrayA = new String[] {"A", "B", "C"};
    String[] arrayB = new String[] { "B", "C", "D"};
    Set<String> setA= new HashSet<String>(Arrays.asList(arrayA));
    Set<String> setB= new HashSet<String>(Arrays.asList(arrayB));
    setA.retainAll(setB);
    System.out.println(setA.size());