返回比较两个列表

时间:2016-05-03 18:24:36

标签: java

我发现以下示例打印了两个列表之间的相似之处。事实上,如果两个列表具有相同的值,我只想返回true,否则返回false。例如,以下代码应返回false false。

public static void main(String[] args) {
    List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
    List<Integer> list2 = Arrays.asList(1, 2);

    Set<Integer> similar = new HashSet<Integer>(list1);
    similar.retainAll(list2);
    System.out.println("Similar  " + similar);
}

1 个答案:

答案 0 :(得分:1)

您应该使用List.equals

public class HelloWorld{

     public static void main(String[] args) {
    List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
    List<Integer> list2 = Arrays.asList(1, 2);
    boolean test = list1.equals(list2);
    System.out.println("Similar  " + test);
}
}

因此,来自equals的{​​{1}}将检查两个列表是否相等,其中包含完整的术语,相同的大小和相同的值以及相同的位置。您对List所做的只会检查一个列表是否是其他列表的子集。但是,如果HashSetlist1的子集,list2list2的子集,则它们是相等的(通过数学计算)。但是,list1更快,您需要更少的内存,然后创建两个List.equals()并执行子集操作。

但是,就Sets而言,{1,2,3}等于{1,2,3}但不等于{1,3,2}。如果您希望List.equals等于{1,2,3}{1,3,2},那么请使用{1,3,2,1,3}执行此操作:

Sets

public class HelloWorld{ public static void main(String[] args) { List<Integer> list1 = Arrays.asList(1, 2, 3, 4); List<Integer> list2 = Arrays.asList(1, 2); Set<Integer> similar2 = new HashSet<Integer>(list2); Set<Integer> similar1 = new HashSet<Integer>(list1); boolean test = similar1.equals(similar2); System.out.println("Similar " + test); } } 的工作方式与Set.equals不同,因为它检查List.equals中的每个元素是否都存在于similar1中(通过迭代),它不关心顺序。 (感谢@ brso05指出这一点。)