Java List的equals方法学习
2016-10-27 00:23
411 查看
首先看下面程序
ArrayList、Vector两者都实现了List接口、继承AbstractList抽象类,其equals方法是在AbstractList类中定义的,源代码如下:
public class Test{ public static void main(String[] args){ ArrayList<String> str1 = new ArrayList<String>(); str1.add("123"); ArrayList<String> str2 = new ArrayList<String>(); str2.add("123"); System.out.println(str1.equals(str2)); } }程序输出结果为True。很显然list重写了equals方法
ArrayList、Vector两者都实现了List接口、继承AbstractList抽象类,其equals方法是在AbstractList类中定义的,源代码如下:
public boolean equals(Object o) { if (o == this) return true; // 判断是否是List列表,只要实现了List接口就是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(); // 有不相等的就退出 if (!(o1==null ? o2==null : o1.equals(o2))) return false; } // 长度是否相等 return !(e1.hasNext() || e2.hasNext()); }从源码可以看出,equals方法并不关心List的具体实现类,只要是实现了List接口,并且所有元素相等、长度也相等的话就表明两个List是相等的,所以例子中才会返回true。
相关文章推荐
- 多态Object类equals方法学习笔记ObjectDemo.java
- 学习effective java-8对所有对象共同的方法之覆写equals方法时请遵从一般规约
- java核心技术学习笔记8---equals()方法和hashCode()方法
- Java学习之面向对象(1.Object类,(1)toString方法,(2)equals方法,2.对象转型(casting),3.动态绑定与多态,4.抽象类(abstract),5.Final关键字)
- Java学习笔记——equals()方法总结
- Thinking in Java 4th学习笔记--Java中的双等号(==)比较操作符与equals()方法
- [bxd学习java基本点]7.linkedList方法,remove移走的要显示元素
- Java学习笔记(七)——获取类中方法的信息,java的LinkedList
- java基础学习总结——equals方法
- 【JAVA学习】hashcode()和equals()方法剖析
- 【JAVA学习】java中==、equals()、hashCode()都和对象的比较有关,在java中这三者各有什么用处呢,即java中为什么需要设计这三种对象的比较方法呢?
- JAVA学习中的一点小发现:LinkedList中.poll()方法在输出时使用应注意的小点
- 【Java学习】java中"=="和equals方法究竟的区别
- JAVA学习--ArrayList使用方法:List的主要实现类
- JAVA学习笔记32——hashCode和equals方法+set接口
- java学习笔记——Object的equals方法
- java 学习笔记--Comparator中为什么其他类实现这个接口为什么没有复写equals(Object obj)这个方法?
- Java学习笔记之Object类以及equals()方法
- 学习笔记-JAVA-考点10-什么情况下需要重写equals和hashcode()两个方法?
- JAVA中equals方法与hashCode方法学习