打字猴:1.700444106e+09
1700444106 编写高质量代码:改善Java程序的151个建议 [:1700438140]
1700444107 编写高质量代码:改善Java程序的151个建议 建议69:列表相等只需关心元素数据
1700444108
1700444109 我们来看一个判断列表相等的例子,代码如下:
1700444110
1700444111 public static void main(String[]args){
1700444112
1700444113 ArrayList<String>strs=new ArrayList<String>();
1700444114
1700444115 strs.add(“A”);
1700444116
1700444117 Vector<String>strs2=new Vector<String>();
1700444118
1700444119 strs2.add(“A”);
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 //只要存在着不相等就退出
[ 上一页 ]  [ :1.700444106e+09 ]  [ 下一页 ]