List集合根据索引删除数据时用另一个List集合的数据当索引操作失败问题即List.remove(List1.get(index))

这个也是一个坑,平时没怎么注意,在笔试时碰到了,唉,坑啊

List集合在进行获取用的是get(int index),而删除指定元素有两种方法,一个是remove(int index),一个是remove(Object o),这两个也好理解,一个根据索引一个根据存在List里的元素对象对比

而主要的问题就是这里
当我用List.remove(List1.get(index))时竟然无法删除List 集合里的索引是List1.get(index) ,一开始我认为是List1 是不是没装上索引,后面验证不是,而且List1.get(index) 输出出来的和我预想值是一样的,这就百思不得其解了,我会还一度认为是不是List的remove方法错了,最后都不是,在测试类里List的remove没有问题,那我就确定肯定是List.remove(List1.get(index))这句话有问题,

最后在网上一个帖子上看到了,原来是因为List1.get(index) 得到的是一个Integer 类型的对象,记住它是对象,即使它在-128到+127可以自动拆箱成int,但是还是不能忘记一开始它还一个对象,因为编译期它不知道你的数值是几,到底是否满足自动拆箱的要求
List的remove方法看它的返回类型是Integer对象,就直接用remove(Object o)了,即使这个拆箱是自动的,

这就解释的通了,因为返回的是一个对象,所以List的remove 没用List.remove(int index) 而是用的List.remove(Object o),所以就找不到

下面是帖子里面的原因我复制过来了,参考https://bbs.csdn.net/topics/391024767?list=lz
原因:
1、集合框架只能存放对象,不能存放基本数据类型,所以index取出来的是Integer对象,而不是你想要的int类型。(提醒一点,就算int类型存进去在集合里也是Integer类型)
2、list提供了两个remove方法,分别是remove(int index),remove(Object o),因为Integer对象也是Object类型的,所以匹配list.remove(Object o),不会进行拆箱

解决:

  1. list.remove(index.get(i).intValue),手动强制拆箱,不等待自动拆箱,因为index.get(i).intValue返回类型是int,它就知道你想用List.remove(int index)
  2. 当然你也可以强转在List.remove((int)List1.get(index))或者再来一行把List1.get(index)赋给一个int类型的变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值