Java ArrayList indexOf泛型类型

时间:2014-04-26 14:48:27

标签: java generics arraylist generic-collections

ArrayList 描述为

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

大多数主要方法都适用于 E 泛型类型(获取设置添加 addAll 等)。

但方法包含 indexOf lastIndexOf 删除获取对象键入参数 - 这只是因为内部使用或 Object.equals()或其他任何内容?

3 个答案:

答案 0 :(得分:3)

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

但是对于contains之类的操作而言,它是不同的 - 例如,询问字符串列表是否包含特定的Integer是完全合法的。答案永远都是否定的,但问这个问题并不是一个错误。

答案 1 :(得分:2)

来自{7}}的Java 7 API

  

public boolean contains(Object o)

     

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

看看这个,它说的是确定o是否是列表成员的比较取决于o的{​​{1}}方法的实现。通过将参数类型指定为equals(),我们可以负责确定输入对象类的相等性,而不是Object列表的类型参数。

答案 2 :(得分:1)

那是因为contains,lastIndexOf,remove等方法需要在执行相应的操作之前检查对象是否相等,这是通过使用equals方法完成的。并且方法来自对象类,应该被泛型类型E对象覆盖。 关于这个获取的集合,设置,添加等方法不需要任何比较。