首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么List接口的lastIndexOf()方法接受Object作为参数而不是E?

List接口的lastIndexOf()方法接受Object作为参数而不是E,是因为List接口是Java集合框架中的一部分,它允许存储各种类型的对象。在List中,元素的类型可以是任意的,因此lastIndexOf()方法需要接受一个Object类型的参数来表示要查找的元素。

使用Object作为参数类型的好处是,可以在List中存储不同类型的对象,并且可以通过lastIndexOf()方法来查找指定的对象。这种灵活性使得List接口可以适用于各种场景,无论是存储基本类型还是自定义类型的对象。

然而,需要注意的是,由于Object是所有类的父类,因此在使用lastIndexOf()方法时需要进行类型转换。如果要查找的元素的类型与List中存储的元素类型不匹配,会导致类型转换异常。为了避免这种情况,可以在调用lastIndexOf()方法之前先进行类型检查或使用泛型来限制List中元素的类型。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 集合深入理解(4):List 接口

Java 集合框架中最常使用几种 List 实现类是 ArrayList,LinkedList 和 Vector。在各种 List 中,最好做法是以 ArrayList 作为默认选择。...为什么 List元素 “有序”、“可以重复”呢? 首先,List 数据结构就是一个序列,存储内容时直接在内存中开辟一块连续空间,然后将空间地址与索引对应。...List 接口定义方法 List 中除了继承 Collection 一些方法,还提供以下操作: 位置相关:List 和 数组一样,都是从 0 开始,我们可以根据元素在 list位置进行操作,比如说...public boolean equals(Object o) { return this == o; } 因此和 Set,Map 一样,List 中如果想要根据两个对象内容不是地址比较是否相等时...) 作用同上,不同是当 参数 array 长度比 List 元素大时,会使用参数 array 保存 List元素;否则会创建一个新 数组存放 List所有元素; ArrayList

1.2K100
  • Java 集合深入理解:List 接口

    List 接口 一个 List 是一个元素有序、可以重复、可以为 null 集合(有时候我们也叫它“序列”)。...为什么 List元素 “有序”、“可以重复”呢? 首先,List 数据结构就是一个序列,存储内容时直接在内存中开辟一块连续空间,然后将空间地址与索引对应。...List 接口定义方法 List 中除了继承 Collection 一些方法,还提供以下操作: 位置相关:List 和 数组一样,都是从 0 开始,我们可以根据元素在 list位置进行操作,比如说...public boolean equals(Object o) { return this == o; } 因此和 Set,Map 一样,List 中如果想要根据两个对象内容不是地址比较是否相等时...) 作用同上,不同是当 参数 array 长度比 List 元素大时,会使用参数 array 保存 List元素;否则会创建一个新 数组存放 List所有元素; ArrayList

    52650

    泛型接口,泛型类和泛型通配符

    为什么继承时候也要确定泛型呢?因为继承就是在使用一个已经定义好类,使用泛型类,就要指定类型。 3.用什么样参数形式来接受List这种形式参数?...现在需要为所有List抽象一个方法,不论给参数ListList,都可以接收并且打印List元素。是不是理所当然想到了List?...显然这样是不可以,错误提示参数类型不匹配,Object是所有类型父类,但是List不是List父类,那应该使用什么方法达到上面的要求呢?...List提供add(E e方法是需要指定类型,这里不是E吗?这是个泛型类型啊?为什么要提供类型?因为这是定义,一旦要使用add(E e)方法,必须指定具体类型。...如果我使用List作为参数,传入到printAllObject方法,运行完打印元素语句后,会往List类型集合里面新增一个Object类型对象,Object又是Book类型父类

    2.3K20

    java集合【2】——— Collection接口详解

    之所以需要这样一个接口,是因为java作为面向对象,总是避免不了处理多个对象情况,要处理多个对象,首先需要容器存储,这个容器就是集合。...最常见三个实现类就是ArrayList,Vector,LinkedList,ArrayList和Vector都是内部封装了对数组操作,唯一不同是,Vector是线程安全ArrayList不是.../在指定位置插入元素 E remove(int index);//根据索引移除某个元素 int indexOf(Object o); //根据对象获取索引 int lastIndexOf(Object...底层是哈希表,一个元素为链表数组 LinkedHashSet HashSet子类 有顺序 底层由哈希表组成 TreeSet 如果无参数构建Set,则需要实现Comparable方法。...Collection接口继承了Iterable接口Map则不是,Map是在各自实现类中才用内部类方式实现Iterator接口,例如HashMap,key或者value或者它们组合entry都可以使用迭代器进行遍历

    1.1K21

    LinkedList 源码分析

    实现 这个类实现接口比较多,具体如下: 首先这个类是一个 List 自然有 List 接口 然后由于这个类是实现了 Deque 这个接口是双端队列接口,所以说它是具有双端队列特性。...构造方法分析 只有两个构造方法。其中一个是默认空构造也就是生成一个空 LinkedList 另外一个就是接受一个 Collection 接口。里面调用了 PutAll 方法。...主要方法分析 1. add 这个方法就直接调用了 linkLast linkLast 里面就是直接把元素添加到元素结尾。...这个方法和上面的方法实现方式一样,但是注意这个方法意思是找到最后一个与之匹配元素,他并不是从头开始找,而是直接从尾节点开始遍历。...9. push/pop 底层方法就是 addFirst 和 removeFirst 10. remove(noargs)/remove(E e) 无参调用 removeFirst 有参数就是去查找然后删除

    51040

    java集合【6】-- Collection源码解析

    之所以需要这样一个接口,是因为java作为面向对象,总是避免不了处理多个对象情况,要处理多个对象,首先需要容器存储,这个容器就是集合。...最常见三个实现类就是ArrayList,Vector,LinkedList,ArrayList和Vector都是内部封装了对数组操作,唯一不同是,Vector是线程安全ArrayList不是.../在指定位置插入元素 E remove(int index);//根据索引移除某个元素 int indexOf(Object o); //根据对象获取索引 int lastIndexOf(Object...底层是哈希表,一个元素为链表数组 LinkedHashSet HashSet子类 有顺序 底层由哈希表组成 TreeSet 如果无参数构建Set,则需要实现Comparable方法。...Collection接口继承了Iterable接口Map则不是,Map是在各自实现类中才用内部类方式实现Iterator接口,例如HashMap,key或者value或者它们组合entry都可以使用迭代器进行遍历

    52530

    Java基础系列(四十一):集合之List

    前言 List是继承自Collection一个子接口,它提供了一个有序集合,在这个集合中我们可以使用索引去获取集合中值,同时,我们也可以通过迭代器去访问集合中元素,第一种方法被称为随机访问,因为我们可以按照任意顺序去访问元素...int indexOf(Object o); int lastIndexOf(Object o); // List Iterators ListIterator...remove(int index):删除指定索引(index)位置元素,并将处于该位置后面的元素索引减1 indexOf(Object o):获取对象o在集合中索引 lastIndexOf(Object...replaceAll(UnaryOperator operator)这里和String类中replaceAll()方法并不相同,这里接收参数是一个函数式接口,我们来看一下这个函数式接口源码:...super E> c)传入同样是一个函数式接口,我们可以自定义排序规则后,调用这个方法进行排序: List humans = Lists.newArrayList(new Human("

    35710

    Java集合类详解

    所有实现Collection接口类都必须提供两个标准构造函数:无参数构造函数用于创建一个空Collection,有一个 Collection参数构造函数用于创建一个新Collection,这个新... T[] *All方法参数类型都为Collection ,大多数方法都是返回boolean类型值,Collection 接口用于表示任何对象或元素组。...Collection,表示映射不是真正集合。   ...● HashMap不是同步Hashtable是同步。   ● 迭代HashMap采用快速失败机制,Hashtable不是,所以这是设计考虑点。   ...或者说为什么我们应该一直使用ArrayList不是Vector   你应该使用ArrayList不是Vector是因为默认情况下你是非同步访问,Vector同步了每个方法,你几乎从不要那样做,通常有想要同步是整个操作序列

    92920

    (38) 剖析ArrayList 计算机程序思维逻辑

    public int lastIndexOf(Object o) 从后往前找。 public boolean contains(Object o) 是否包含指定元素。...(int index); int indexOf(Object o); int lastIndexOf(Object o); ListIterator listIterator(); ListIterator...比如说,Collections类中有一个方法binarySearch,在List中进行二分查找,它实现代码就根据list是否实现了RandomAccess采用不同实现机制,如下所示: public...,这个方法返回List,它实现类并不是本节介绍ArrayList,而是Arrays类一个内部类,在这个内部类实现中,内部用数组就是传入数组,没有拷贝,也不会动态改变大小,所以对数组修改也会反映到...作为程序员,就是要理解每种数据结构特点,根据场合不同,选择不同数据结构。

    94250

    刷算法,这些api不可不知!

    类/接口 描述 方法 String 字符串 charAt toCharArray split substring indexOf lastIndexOf replace length List...List b = new ArrayList(a); //接受一个集合容器 get get(int index) // 返回元素位置在index元素e --- array...如果你在调用了sublist返回了子list之后,如果修改了原list大小,那么之前产生list将会失效,变得不可使用 集合工具 Collections是集合工具类,提供了一些操作集合方法。...--- O(m * n) m为原串长度, n为str长度 // (假如要找一个字符char c,str可以表示成String.valueOf(c),然后作为参数传进去....--- O(m * n) m为原串长度, n为str长度 // (假如要找一个字符char c,str可以表示成String.valueOf(c),然后作为参数传进去.

    51110

    Java基础总结大全(2)

    **数组长度固定,集合长度是可变 **数组值可以存储对象,还可以存储基本数据类型;集合只能存储对象 **数组存储数据类型是固定集合存储数据类型不固定 (3)集合类特点: 集合只能存储对象...*****List集合子类及其方法 (1)List接口是Collection接口一个子接口。...(2)List接口元素有如下特点(对角标的操作都是特有方法,因为有序): A:元素有序(存储顺序和取出顺序一致) B:元素可以重复 (3)List接口特有方法 A:add(int index...index):获取指定位置元素 E:indexOf(Object obj):获取指定元素位置 F:subList(int start,int end):从一个大List中截取一个小List...G:listIterator():返回一个List接口特有的迭代器 (1)、ArrayList: |--->构造方法摘要:(少用,不是重点) ArrayList():构造一个初始容量为 10

    1.5K90

    Oracle Java Numbers和Strings

    ---- 使用“Number”对象不是基元有三个原因: 作为需要对象方法参数(通常在处理数字集合时使用)。...boolean equals(Object obj) 确定此数字对象是否等于参数。如果参数不是“null”,并且是具有相同类型和数值对象,则方法返回“true”。...“format()”方法(“DecimalFormat”继承自“NumberFormat”)随后由“myFormatter”调用-它接受“double”值作为参数,并以字符串形式返回格式化数字: 下面是一个示例程序...值作为基元类型不是“Integer”对象添加到“li”中,但代码仍会编译。...因为“li”是“Integer”对象列表,不是“int”值列表,所以您可能会想为什么Java编译器不会发出编译时错误。

    21800

    Kotlin入门潜修之类和对象篇—泛型及其原理

    extends E> c); 我们发现addAll方法入参泛型定义实际上是这个类型,不是这个类型。这就引出了java中通配符(使用?表示)概念。...> list) { //在该方法中测试添加对象,实际上测试是无界通配符作为类泛型参数场景,因为list类型是泛型ListList list) { //在该方法中测试添加对象,list.add实际上测试是通配符作为类泛型参数场景,因为list类型是泛型List类即List list) { //在该方法中测试添加对象,list.add实际上测试是通配符作为类泛型参数场景,因为list类型是泛型List类即List修饰时是协变,或者说E是个协变类型参数;IList是E生产者,不是E消费者。 什么是协变?

    92830

    java集合源码分析(二):List与AbstractList

    List add() 参数(int,E), Collection 中 add() 参数E,因此 List 集合中同时存在指定下标和不指定下标两种添加方式; remove():删除指定下标的元素...注意,List remove() 参数是 int , Collection 中 “remove()` 参数是 Objce,也就是说,List 中同时存在根据元素是否相等和根据元素下标删除元素两种方式...,就立刻抛出异常,不是让可能出错参数被使用从而引发不可预知错误。...面对迭代期间并发修改,这提供了快速失败行为,不是不确定行为。 子类对此字段使用是可选。...接口,新增方法特点主要体现在可以通过下标去操作节点,可以说大部分下标可以作为参数方法都是 List 中添加方法

    33920

    深入理解 Java 泛型

    为什么引入泛型 在引入泛型之前,要想实现一个通用、可以处理不同类型方法,你需要使用 Object 作为属性和方法参数,比如这样: public class Generic { private...编译器提示我们把方法 List 改成 List 就好了,这是为什么呢? ? 和 Object 不一样吗? 的确因为 ? 和 Object 不一样,List<?...它们目的都是为了使方法接口更为灵活,可以接受更为广泛类型。 用于灵活写入或比较,使得对象可以写入父类型容器,使得父类型比较方法可以应用于子类对象。 < ?...原始类型和带参数类型 之间主要区别是: 在编译时编译器不会对原始类型进行类型安全检查,却会对带参数类型进行检查 通过使用 Object 作为类型,可以告知编译器该方法可以接受任何类型对象,比如String...或 Integer 你可以把任何带参数类型传递给原始类型 List,但却不能把 List 传递给接受 List 方法,因为泛型不可变性,会产生编译错误。

    2.1K111
    领券