我发现以下示例打印了两个列表之间的相似之处。事实上,如果两个列表具有相同的值,我只想返回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);
}
答案 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
所做的只会检查一个列表是否是其他列表的子集。但是,如果HashSet
是list1
的子集,list2
是list2
的子集,则它们是相等的(通过数学计算)。但是,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指出这一点。)