我想實現一個簡單的檢查,看看arraylist是否是另一個的子集。試圖檢查如果arraylist是另一個的子集
我在我的兩個列表中有以下元素,列表1 [A F K]和列表2 [B A C F K]。 list1包含list2中的所有元素,所以它應該返回true
我試過使用list1.containsAll(list2),但它並沒有給我真實的。
我試着循環遍歷這兩個列表,如果發現匹配,我在第一個列表中清空那個位置,但它不工作,因爲我認爲它遭受了併發修改。這是我的代碼
公共靜態布爾isSubset(樹節點T1,T2樹節點){
ArrayList<String> subTreeList = new ArrayList<String>();
ArrayList<String> mainTreeList = new ArrayList<String>();
treeCopyToList(t1,subTreeList);
treeCopyToList(t2,mainTreeList);
int mainTreeSize = mainTreeList.size();
for(int i = 0; i < subTreeList.size(); i++){
for(int j = 0; j < mainTreeSize; j++){
if(subTreeList.get(i).equals(mainTreeList.get(j))){
subTreeList.remove(i);
}
}
}
System.out.println(subTreeList);
return subTreeList.isEmpty();
}
這裏subTreeList最終輸出[A]。我知道它跳過中間元素,因爲當我刪除大小元素也被修改。我如何着手解決這個問題,以便我最終得到一個空列表。
「我嘗試使用list1.containsAll(list2),但它並沒有給我真實的。」 - 你爲什麼這麼認爲? –
看着你的代碼......我看不出它是如何迭代的。你正在用一個空的'ArrayList'實例化'subTreeList',所以我不相信它會迭代。也就是說,除非在這裏有什麼東西你不分享;在這種情況下,我也鼓勵你發佈你嘗試使用'containsAll'的舊方法。 – Makoto
抱歉,我沒有給出完整的代碼。其實我有一個輔助方法來填充這兩個列表。我會編輯代碼 – Htlcs