java list remove方法

当幸福来敲门1 2017-11-27 11:50:30
java的ArrayList方法对于对象,存储的是对象的引用,对于ArrayList的remove方法,remove(Object o)方法的底层这样写的:

public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}

其中 对象 o 又是 object类型的,object对象的equals()方法的实现是:

public boolean equals(Object obj) {
return (this == obj);//进行地址的比较
}


所以可以得出,remove(Object o)是根据对象地址进行删除的。那么依据此原理,下面应该删除不成功的,为什么b = true??请高手指点:

Integer i = new Integer(130);
Integer j = new Integer(130);

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(i);
boolean b = list.remove(j);
System.out.println("b=" + b);
...全文
474 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
心灵之火. 2017-11-27
  • 打赏
  • 举报
回复
好好看看基础课程吧
  • 打赏
  • 举报
回复
谢谢 zy1404 的回答,是这个原因,看来我还是没有完全的理解多态
  • 打赏
  • 举报
回复
其中Object 是 Integer 的父类,其实最终调用的是 Integer.equal方法(多态) Integer继承关系如下: java.lang 类 Integer java.lang.Object 继承者 java.lang.Number 继承者 java.lang.Integer
  • 打赏
  • 举报
回复
其中Object 是 Integer 的父类,其实最终调用的是 Integer.equal方法
墨笙弘一 2017-11-27
  • 打赏
  • 举报
回复
I和J指向同一个引用
  • 打赏
  • 举报
回复
那两个对象的地址值应该是一样的吧
diexu1719 2017-11-27
  • 打赏
  • 举报
回复
不是删除成功么,失败flase

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧