列表比较只关心元素数据

来源:互联网 发布:美国编程网站儿童 编辑:程序博客网 时间:2024/05/16 06:42

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

public static void main(String[] args) {    ArrayList<String> strs1 = new ArrayList<String>();    strs1.add("A");        Vector<String> strs2 = new Vector<String>();    strs2.add("A");        System.out.println(strs1.equals(strs2));}
        一个是 ArrayList,一个是 Vector,结果肯定不相等的!但事实上结果却是两者相等的。

        我们来详细分析下为什么结果为 true。首先两者都是实现了 List 接口,都继承了 AbstractList 抽象类,而equals方法就是在 AbstractList 中定义的,代码如下:

public boolean equals(Object o) {    if (o == this)        return true;    // 是否是 List 列表,只要实现 List 接口即可    if (!(o instanceof List))        return false;    // 通过迭代器访问 list 中所有元素    ListIterator<E> e1 = listIterator();    ListIterator e2 = ((List) o).listIterator();    // 遍历两个 list 的元素进行比较    while(e1.hasNext() && e2.hasNext()) {        E o1 = e1.next();        Object o2 = e2.next();        // 发现不相等就退出        if (!(o1==null ? o2==null : o1.equals(o2)))        return false;    }    // 判断长度是否也相等    return !(e1.hasNext() || e2.hasNext());}

        在equals方法中只关心是否实现了 List 接口,并不关心具体的实现类。只要所有元素都相等,且长度相同就表示两个 List 是相等的。所以上面结果为 true 也就能理解了。

        备注:其它的集合类型,如Set、Map等与此相同。


参考文献:《编写高质量代码:改善Java程序的151个建议》的建议69。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕上班路途太远怎么办 硕士错过校招应该怎么办 收银员收多了钱怎么办 商铺贷款批不了怎么办 铁路局的门面乱收房租怎么办 酒店夜审房费多过怎么办 夜审房价录多了怎么办 做工地拿不到钱怎么办 赢了官司拿不到钱怎么办 工地上拿不到钱怎么办 做了工拿不到钱怎么办 高速公路上车没油了怎么办 高铁乘务员年龄大了怎么办 总公司跑路了分公司怎么办 坐车久了耳朵懵怎么办 过完隧道耳朵疼怎么办 护照还在大使馆需要出国怎么办 护照在大使馆不返回怎么办 美国面签迟到了怎么办 成都美签迟到了怎么办 签证电调没人接怎么办 单位没有抬头纸怎么办在职证明 出国签证无银行流水怎么办 铁路职工得癌症后工作怎么办 去泰国不会泰语和英语怎么办 签证状态一直没有更新怎么办 简理财不能身份信息确认怎么办 德国领事馆没有收到预约邮件怎么办 父母一方带孩子英国签证怎么办 去韩国自由行签证怎么办 韩国自由行签证的该怎么办 法院离婚判决书没了怎么办 离婚判决书对方没收到怎么办 法院判离怎么办离婚证 判决书下来后没钱还怎么办 拿调解书怎么办离婚证 判决书生效后对方拒不履行怎么办 收到民事判决公告该怎么办 苹果手机gps信号弱怎么办 二审败诉后拿到判决书怎么办 农商行房贷逾期一天怎么办