我正在尝试执行一个简单的检查,看看arraylist是否是另一个的子集。
我的两个列表中有以下元素:list1 [A F K]和list2 [B A C F K]。 list1的所有元素都在list2中,所以它应该返回true
我尝试使用list1.containsAll(list2),但它没有给我真实。
我尝试在列表中循环,如果找到匹配,我在第一个列表中清空该位置,但它没有工作,因为我认为它会受到并发修改的影响。这是我的代码
public static boolean isSubset(TreeNode t1,TreeNode 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]。我知道它会跳过中间元素,因为当我删除size元素时也会被修改。我如何解决这个问题,以便最终获得一个空列表。
答案 0 :(得分:2)
您使用containsAll
的顺序是向后的。
您正在尝试确定list2
是否包含list1
中的所有元素,而list1
是否包含list2
中的所有元素。
简单地反转它,它应该适合你。