1700444120
1700444121
System.out.println(strs.equals(strs2));
1700444122
1700444123
}
1700444124
1700444125
两个类都不相同,一个是ArrayList,一个是Vectory,那结果肯定不相等了!真是这样吗?其实结果是两者相等!
1700444126
1700444127
我们来详细分析一下为什么两者是相等的。两者都是列表(List),都实现了List接口,也都继承了AbastractList抽象类,其equals方法是在AbstractList中定义的,我们来看源代码:
1700444128
1700444129
public boolean equals(Object o){
1700444130
1700444131
if(o==this)
1700444132
1700444133
return true;
1700444134
1700444135
//是否是List列表,注意这里:只要实现list接口即可
1700444136
1700444137
if(!(o instanceof List))
1700444138
1700444139
return false;
1700444140
1700444141
//通过迭代器访问list的所有元素
1700444142
1700444143
ListIterator<E>e1=listIterator();
1700444144
1700444145
ListIterator e2=((List)o).listIterator();
1700444146
1700444147
//遍历两个list的元素
1700444148
1700444149
while(e1.hasNext()&&e2.hasNext()){
1700444150
1700444151
E o1=e1.next();
1700444152
1700444153
Object o2=e2.next();
1700444154
1700444155
//只要存在着不相等就退出
1700444156
1700444157
if(!(o1==null?o2==null:o1.equals(o2)))
1700444158
1700444159
return false;
1700444160
1700444161
}
1700444162
1700444163
//长度是否也相等
1700444164
1700444165
return!(e1.hasNext()||e2.hasNext());
1700444166
1700444167
}
1700444168
1700444169
看到没?这里只是要求实现了List接口就成,它不关心List的具体实现类。只要所有的元素相等,并且长度也相等就表明两个List是相等的,与具体的容量类型无关。也就是说,上面的例子中虽然一个是ArrayList,一个是Vector,只要里面的元素相等,那结果就是相等。
[
上一页 ]
[ :1.70044412e+09 ]
[
下一页 ]