测试代码demo:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<>();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
List<String> linkList = new LinkedList<>();
linkList.add("a");
linkList.add("b");
linkList.add("c");
System.out.println(arrayList.equals(linkList));
}
}
输出结果如下:
可以发现结果是相等的,符合预期。
那么接着看看用于比较的equals方法,如下:
public boolean equals(Object o) {
//==比较引用地址,如果相等,说明是一个对象,返回true
if (o == this)
return true;
//看下类型是否是List
if (!(o instanceof List))
return false;
//通过迭代器来访问list的所有元素
ListIterator<E> e1 = listIterator();
ListIterator<?> e2 = ((List<?>) o).listIterator();
//比较大小
while (e1.hasNext() && e2.hasNext()) {
E o1 = e1.next();
Object o2 = e2.next();
//只要不相等,就返回false
if (!(o1==null ? o2==null : o1.equals(o2)))
return false;
}
//比较长度是否相等
return !(e1.hasNext() || e2.hasNext());
}
可以发现比较集合是否相等的逻辑就是顺序比较每一个元素是否相等以及长度是否相等。那如果两个集合里的元素相等的,只是顺序不同呢,修改如下:
运行结果如下:
结果就变为false了。说明使用equals方法来比较集合是否相等,元素顺序也是评判的标准之一。