繁体   English   中英

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

[英]Count elements if in both arrays

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

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

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()));

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

像这样

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

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

希望能帮助到你!

基本上没有 您必须至少使用两个嵌套循环( forwhiledo-while )或模仿循环的递归方法之类的其他技术,但最后您将使用两个。 即使您使用List#contains (如RafaRomero的回答所述 ),您仍在使用两个嵌套循环,虽然不是显式的,但它们在那里。

另一个选择可能是使用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;
}

在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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM