Java ArrayList索引为泛型类型



ArrayList描述为

public class ArrayList<E> extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

大多数主要方法都适用于E泛型类型(getsetaddaddAll等)。

但是方法包含indexOfremoveObject类型作为参数-这只是因为内部使用或Object.equals()或其他原因吗?

集合类型仅在必须匹配才能使操作合法的情况下使用其泛型类型E。如果你有一个字符串列表,那么像add这样的东西显然只有在传递字符串时才有意义。

但对于像contains这样的操作,情况就不同了——例如,询问字符串列表是否包含特定的Integer是完全合法的。答案永远是否定的,但这并不意味着提出这个问题是错误的。

从用于ArrayList#contains() 的Java 7 API

public boolean contains(Object o)

如果此列表包含指定的元素,则返回true。更多形式上,返回true当且仅当此列表至少包含一个元素CCD_ 9使得CCD_。

由此可见,判断o是否为列表成员的比较取决于oequals()方法的实现。通过将参数类型指定为Object,我们可以将确定相等性的责任放在输入对象的类上,而不是列表的类型参数E上。

这是因为contains、lastIndexOf、remove等方法在执行相应的操作之前需要检查对象的相等性,这是通过使用equals方法完成的。equal方法来自对象类,该类应该被泛型类型E对象覆盖。在此基础上,不需要对get、set、add等方法进行比较。

最新更新