试图检查arraylist是否是另一个的子集

时间:2014-03-30 18:36:59

标签: java arraylist

我正在尝试执行一个简单的检查,看看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元素时也会被修改。我如何解决这个问题,以便最终获得一个空列表。

1 个答案:

答案 0 :(得分:2)

您使用containsAll的顺序是向后的。

您正在尝试确定list2是否包含list1中的所有元素,而list1是否包含list2中的所有元素。

简单地反转它,它应该适合你。