关于 Java LinkedList 的一个 API: remove(int index) 和 remove(Object o)

2020-10-24 09:04:45 +08:00
 ericgui

我想问的是,如果这个 list 是这样的:LinkedList<Integer> list = new LinkedList<>();

list.remove(0);

这个 0,是 index 0 还是里面的某个元素 0 ? 假设 list 里面有个元素的值也恰好是 0 。

反正我是晕了。

2644 次点击
所在节点    程序员
17 条回复
liufish
2020-10-24 09:15:27 +08:00
得空我试一下先😄
ciaoly
2020-10-24 09:23:03 +08:00
不懂。你这样用的话,参数 0 是 int 还是 Integer ?感觉应该是根据你传入的参数 0 的类型决定用哪个方法吧
ljpCN
2020-10-24 09:23:15 +08:00
可是 0 不是 Object 叭
leonme
2020-10-24 09:28:02 +08:00
类型由窄到宽选择
lance6716
2020-10-24 09:28:13 +08:00
好问题,感觉 Java 不好处理这个
ericgui
2020-10-24 09:31:12 +08:00
@leonme 谢谢,似乎是这样的,如果仅仅 list.remove(0), 这里是 index

但我强制转换为 Integer,就好了,list.remove((Integer)0); 就好了
1194129822
2020-10-24 09:31:56 +08:00
???这个问题不懂的话,建议先看 The Java Language Specification Java SE Edition.
重载是编译期就确定是哪个方法,如果还有个变元重载,那还更分不清了???
编译期确认方法三个阶段
1.不允许装箱拆箱 也不允许变元重载
2.允许装箱拆箱重载
3.允许装箱拆箱 允许变元重载,变元重载优先级最低
nicocho
2020-10-24 09:36:29 +08:00
如果是传参是 int,那默认是调用 remove(int var1)
如果 Integer.valueOf()封装下 int 值,那就调用 remove(Object var1)了
如楼上说的,根据你传参类型是基本还是引用来决定的
ericgui
2020-10-24 09:36:33 +08:00
@1194129822 我是前端,用 Java 做 Leetcode,老兄你稍安勿躁,少打两个问号,也同样可以表达你的意思。
谢谢哈,答案不错,已经感谢
cwek
2020-10-24 09:36:46 +08:00
真巧我问过知乎,R 大回答过
https://www.zhihu.com/question/29371504
方法前面选择按照类型靠近原则,不会先装解箱,所以优先是 remove(int index)。
ericgui
2020-10-24 09:38:08 +08:00
@nicocho 已感谢,非常感谢好答案
yeqizhang
2020-10-24 09:40:24 +08:00
remove object 这个很少用的吧,都没印象有这个方法
ericgui
2020-10-24 09:46:00 +08:00
@yeqizhang 做 leetcode 会用到
wudaye
2020-10-24 12:24:44 +08:00
Jvm 规范对重载优先级有定义
aguesuka
2020-10-24 16:06:14 +08:00
建议配合 fun(Object[])fun(int...)fun(int[])fun(Object)使用
xuanbg
2020-10-24 16:19:56 +08:00
0 首先是 int,然后是 Integer,最后才是 Object 。
BBCCBB
2020-10-24 16:40:05 +08:00
你传 int 就是 index,你穿 Integer 就是 object??

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/718086

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX