泛型类型的Java ArrayList索引

泛型类型的Java ArrayList索引,java,generics,arraylist,generic-collections,Java,Generics,Arraylist,Generic Collections,阵列列表描述为 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 公共类ArrayList扩展了AbstractList 实现列表、随机访问、可克隆、java.io.Serializable 大多数主要方法都使用E泛型类型(get、set、add、addAll等) 但是

阵列列表描述为

public class ArrayList<E> extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
公共类ArrayList扩展了AbstractList
实现列表、随机访问、可克隆、java.io.Serializable
大多数主要方法都使用E泛型类型(getsetaddaddAll等)

但是方法包含indexOflastIndexOf移除将对象类型作为参数-这仅仅是因为内部使用或Object.equals()或其他原因吗?

来自Java 7 API

公共布尔包含(对象o)

如果此列表包含指定的元素,则返回
true
。更多 形式上,返回
true
当且仅当此列表至少包含 一个元素
e
,使得
(o==null?e==null:o.equals(e))


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

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

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


但是对于像
contains
这样的操作,它是不同的——例如,询问字符串列表是否包含特定的
整数是完全合法的。答案总是否定的,但这并不意味着提问是错误的。

链接问题的答案是否足够清楚,或者我应该详细说明吗?@meriton是的,谢谢!这个解释应该添加到ArrayList的javadoc中,谢谢!=)