Java 比较两个数组列表

Java 比较两个数组列表,java,arraylist,comparison,sorting,similarity,Java,Arraylist,Comparison,Sorting,Similarity,可能重复: 我有两个大小不同的字符串数组列表。我需要写一个方法,返回真正的iff列表一个较大的列表包含列表B的每个值较小的列表。我将如何着手编写这样一种方法? 谢谢 看一看 有时,即使是做家庭作业,也只需看一眼文档;] 听起来你应该使用集合而不是列表。对列表执行此操作将在^2上,而对HashSet或TreeSet则分别为on或ONlogN 但是,如果性能不是一个主要问题,即列表相对较小,或者您很少执行此操作,那么只需在适当的列表对象上使用containsAll方法即可

可能重复:

我有两个大小不同的字符串数组列表。我需要写一个方法,返回真正的iff列表一个较大的列表包含列表B的每个值较小的列表。我将如何着手编写这样一种方法? 谢谢

看一看


有时,即使是做家庭作业,也只需看一眼文档;]

听起来你应该使用集合而不是列表。对列表执行此操作将在^2上,而对HashSet或TreeSet则分别为on或ONlogN

但是,如果性能不是一个主要问题,即列表相对较小,或者您很少执行此操作,那么只需在适当的列表对象上使用containsAll方法即可

            public boolean containsAll(List<String> listA, List<String> listB) {
                Set<String> listAAsSet = new HashSet<String>(listA);

                for (String string : listB) {

                    if(listAAsSet.contains(string)==false) {
                        return false;
                    }
                }
                return true;
            }

或者,您可以使用List.containsAll:

可能有一种更有效的方法,但您可以做的是循环遍历大列表,对于大列表中的每个元素,循环遍历小列表。如果您找到了,请尽早从小列表中跳出,如果未找到,请返回false

bool found = false;

for (string a : listA)
{
   found = false;
   for (string b : listB)
   {
      if (b.equals(a))
      {
         found = true;
         break;
      }
   }

   if (!found)
      return false;
}

return true;

这是家庭作业吗?如中所示,您是否需要编写自己的解决方案,而不是使用API中的内容?两个for循环遍历每个列表。然而,每次我得到一个匹配,它返回真的,即使我没有通过整个列表。我还尝试为每个元素设置检查布尔值,但我不知道如何检查检查!这是我自己的节目。不是在家工作我明白了!Lista就是它的全部!你的台词与你在问题中所问的相反。listB.ContainesAllListA是说listB是否包含listA的所有值,如果listB较小,这些值将为false。没有更有效的方法。。。除非转换为不同的数据结构。