泛型类型的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泛型类型(get、set、add、addAll等)
但是方法包含、indexOf、lastIndexOf和移除将对象类型作为参数-这仅仅是因为内部使用或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中,谢谢!=)