簡體   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