![](/img/trans.png)
[英]What kind of helper method would I need to find an intersection between two arraylists?! (recursion only)
[英]Find intersection between two ArrayLists
查找兩個字符串數組列表的交集。
這是代碼:
public ArrayList<String> intersection( ArrayList<String> AL1, ArrayList<String> AL2){
ArrayList<String> empty = new ArrayList<String>();
ArrayList<String> empty1 = new ArrayList<String>();
if (AL1.isEmpty()){
return AL1;
}
else{
String s = AL1.get(0);
if(AL2.contains(s))
empty.add(s);
empty1.addAll(AL1.subList(1, AL1.size()));
empty.addAll(intersection(empty1, AL2));
return empty;
}
}
我希望輸出看起來像這樣:例如,
[a, b, c] intersect [b, c, d, e] = [b, c]
上面的代碼給了我這個輸出,但是我想知道如何使這個代碼更容易理解。
您可以這樣編寫,使其更易於理解:
/**
* Computes the intersection of two Lists of Strings, returning it as a new ArrayList of Strings
*
* @param list1 one of the Lists from which to compute an intersection
* @param list2 one of the Lists from which to compute an intersection
*
* @return a new ArrayList of Strings containing the intersection of list1 and list2
*/
public ArrayList<String> intersection( List<String> list1, List<String> list2) {
ArrayList<String> result = new ArrayList<String>(list1);
result.retainAll(list2);
return result;
}
Java集合已經通過retainAll
調用對此提供了支持。 交集發生在原處,而不是返回新集,這就是為什么要保留原始list1必須創建新的ArrayList的原因。 如果調用對象被修改,則retainAll
返回一個布爾值
ArrayList<String> list1 = new ArrayList<String>();
list1.add("A");
list1.add("B");
list1.add("C");
ArrayList<String> list2 = new ArrayList<String>();
list2.add("D");
list2.add("B");
list2.add("C");
ArrayList<String> intersection = new ArrayList<String>(list1);
intersection.retainAll(list2);
for(String s: intersection){
System.out.println(s);
}
輸出:
B
C
public ArrayList<String> intersection( ArrayList<String> AL1, ArrayList<String> AL2){
ArrayList<String> returnArrayList = new ArrayList<String>();
for(String test : AL1)
{
if(!returnArrayList.contains(test))
{
if(AL2.contains(test))
{
returnArrayList.add(test);
}
}
}
return returnArrayList;
}
您可以使用循環而不是遞歸。
如果您對依賴項沒問題,我建議您看一下Apache Commons集合( http://commons.apache.org/proper/commons-collections/release_4_0.html )。
對於您的特定用途,它將是CollectionUtils( https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/CollectionUtils.html )的方法交叉點
您可以使用Apache Commons Collections ListUtils.intersection
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.