Java列表,矢量比较

时间:2011-09-15 13:42:16

标签: java list vector comparison

我在互联网上看到了以下程序

public class Test1{
 public static void main(String[] args)
 {
 Integer int1 = new Integer(10);
 Vector vec1 = new Vector();
 LinkedList list = new LinkedList();
 vec1.add(int1);
 list.add(int1);
 if(vec1.equals(list)) System.out.println("equal");
 else  System.out.println("not equal");
  }

}

它打印的答案是“平等的”。

怎么可能?

由于

迪利普

6 个答案:

答案 0 :(得分:8)

因为LinkedList和Vector都实现了List#equals()

  

当且仅当指定的对象也是列表时才返回true   列表具有相同的大小,以及所有相应的元素对   这两个名单是平等的。 (如果,两个元素e1和e2相等   (e1 == null?e2 == null:e1.equals(e2))。)换句话说,两个列表是   如果它们包含相同的元素,则定义为相等   订购。此定义确保equals方法正常工作   跨越List接口的不同实现。

具体来说,这是此行为的确切原因。

此定义确保equals方法在List接口的不同实现中正常工作。

答案 1 :(得分:4)

以下是Vector.equals()的API文档(其他List实现的行为类似):

  

将指定的Object与此Vector进行比较以获得相等性。返回   当且仅当指定的Object也是List时,才为true,两个列表都为true   具有相同的大小,以及两者中所有相应的元素对   列表是平等的。

答案 2 :(得分:2)

在java.util.Vector上查看javadoc for equals:

  /**
     * Compares the specified Object with this Vector for equality.  Returns
     * true if and only if the specified Object is also a List, both Lists
     * have the same size, and all corresponding pairs of elements in the two
     * Lists are <em>equal</em>.  (Two elements {@code e1} and
     * {@code e2} are <em>equal</em> if {@code (e1==null ? e2==null :
     * e1.equals(e2))}.)  In other words, two Lists are defined to be
     * equal if they contain the same elements in the same order.
     *
     * @param o the Object to be compared for equality with this Vector
     * @return true if the specified Object is equal to this Vector
     */

equals方法检查列表是否以相同的顺序具有相同的内容。

答案 3 :(得分:0)

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Vector.html#equals%28java.lang.Object%29

equalsVector实施的定义:

  

将指定的Object与此Vector进行比较以获得相等性。当且仅当指定的Object也是List时,返回true,两个列表具有相同的大小,并且两个列表中的所有对应元素对都相等。 (如果(e1 == null?e2 == null:e1.equals(e2)),则两个元素e1和e2相等。)换句话说,如果两个列表包含相同顺序的相同元素,则它们被定义为相等。

VectorLinkedList都是AbstractList的后代(在LinkedList的情况下,我相信会有一个额外的类)。 AbstractList个对象可以相互比较。

答案 4 :(得分:0)

这是因为它们都是列表。

VectorLinkedList都最终从AbstractList继承。

请参阅the source code第512行的equals的实施。

答案 5 :(得分:0)

这是因为LinkedList和Vector在内部调用相同的方法java.util.AbstractList.equals()来进行比较。