列表相等只需关系元素数据

简介:

来看一个判断列表相等的例子,看代码:

复制代码
 1 import java.util.ArrayList;
 2 import java.util.Vector;
 3 
 4 public class Client {
 5     public static void main(String[] args) {
 6         ArrayList<String> strs = new ArrayList<String>();
 7         strs.add("A");
 8         
 9         Vector<String> strs2 = new Vector<String>();
10         strs2.add("A");
11         System.out.println(strs.equals(strs2));
12     }
13 }
复制代码

运行输出:true

两个类都不相同,一个是ArrayList,一个是Vectory,那结果为什么还是true?

两者都是列表List,都实现了List接口,也都继承了AbastractList抽象类,其中equals方法是在AbstractList中定义的,我们看源代码:

复制代码
 1     public boolean equals(Object o) {
 2         if (o == this)
 3             return true;
 4         //是否是List列表,注意这里:只要实现list接口即可
 5         if (!(o instanceof List))
 6             return false;
 7         //通过迭代器访问list的所有元素.
 8         ListIterator<E> e1 = listIterator();
 9         ListIterator e2 = ((List) o).listIterator();
10         //遍历两个list元素
11         while (e1.hasNext() && e2.hasNext()) {
12             E o1 = e1.next();
13             Object o2 = e2.next();
14             //只要存在着不相等的就退出
15             if (!(o1==null ? o2==null : o1.equals(o2)))
16                 return false;
17         }
18         //长度是否也相等
19         return !(e1.hasNext() || e2.hasNext());
20     }
复制代码

 

看到没,这里只是要求实现了List接口就成,它不关心List的具体实现类,只要所有的元素相等,并且长度也相等就表明两个List是相等的,与具体的容量类型无关.

也就是说,上面的例子中虽然一个是ArrayList一个是Vector,只要里面的元素相等,那结果就是相等.

Java如此处理也确实是在为开发者考虑,列表只是一个容器,只要是同一种类型的容器(如List),就不用关心容器的细节差别(如ArrayList和LinkedList),只要确定所有的元素数据相等,那这两个列表就是相等的.

如此一来,我们再开发中就不同太关注容器的细节了.可以把注意力更多的放在数据元素上,而且即使在中途重构容器类型,也不会对相等的判断产生太大的影响.

其他的集合类型,如Set,Map等与此相同,也是只关心集合元素,不用考虑集合类型.

 

判断集合相等时只需关注元素是否相等即可.


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5659914.html,如需转载请自行联系原作者

相关文章
|
1月前
|
移动开发 HTML5 容器
列表元素
【2月更文挑战第13天】列表元素。
19 0
|
2月前
|
算法 前端开发
3020. 子集中元素的最大数量
3020. 子集中元素的最大数量
16 0
|
11天前
|
索引
将数组指定索引位置的元素 移动到 目标索引位置,且不改变其他元素原本的顺序,注意这个不是对调元素位置,是移动某一个元素位置不影响其他元素顺(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)
将数组指定索引位置的元素 移动到 目标索引位置,且不改变其他元素原本的顺序,注意这个不是对调元素位置,是移动某一个元素位置不影响其他元素顺(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)
|
1月前
|
索引 Python
列表、元组和字典之间的区别是什么
列表、元组和字典之间的区别是什么
9 0
|
5月前
|
JavaScript Python
从列表中或数组中随机抽取固定数量的元素组成新的数组或列表
从列表中或数组中随机抽取固定数量的元素组成新的数组或列表
36 0
|
11月前
|
Python
python实现将给定列表划分为元素和大致相等的两个子列表
python实现将给定列表划分为元素和大致相等的两个子列表
|
11月前
|
JSON 数据格式 Python
一日一技:包含非hashable元素的列表如何去重并保持顺序?
一日一技:包含非hashable元素的列表如何去重并保持顺序?
82 0
判断某个值是否在多维关联数组中 返回该值的所在的关联数组
判断某个值是否在多维关联数组中 返回该值的所在的关联数组
63 0