关于list的indexOf与equals的联系

dr_lou 2010-07-05 11:56:53
indexOf
int indexOf(Object o)返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。更确切地讲,返回满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i;如果没有这样的索引,则返回 -1。

参数:
o - 要搜索的元素
返回:
此列表中第一次出现的指定元素的索引,如果列表不包含该元素,则返回 -1
抛出:
ClassCastException - 如果指定元素的类型和此列表不兼容(可选)
NullPointerException - 如果指定的元素是 null,并且此列表不允许 null 元素(可选)


由api我分析,如果o !=null 则equals会影响此方法的返回值,故我作此测试。

package com.xuz.csdn.july05;

public class Product {
private int id;
private String name;

public Product(int id,String name){
this.id = id;
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public boolean equals(Product p){
if (this.id == p.getId()) {
return true;
} else {
return false;
}
}
}


package com.xuz.csdn.july05;

import java.util.ArrayList;
import java.util.List;

public class ProductApp {

public static void main(String[] args) {
Product p1 = new Product(1,"a");
Product p2 = new Product(2,"b");
Product p3 = new Product(3,"c");

Product p2_ = new Product(2,"b");

List<Product> list = new ArrayList<Product>();
list.add(p1);
list.add(p2);
list.add(p3);

for (int i = 0; i < list.size(); i++) {
System.out.println(p2_.equals(list.get(i)));
}

System.out.println(list.indexOf(p2_));
}

}


按照api应该返回1,为何返回-1
...全文
637 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangzemin1991 2010-09-26
  • 打赏
  • 举报
回复
貌似懂了
高亮 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sxzlc 的回复:]
引用 4 楼 jn789987 的回复:
为什么非要是 Object???


方法重载问题

参数不同,是两个方法

不能覆盖之前的方法!
[/Quote]

对,系统调用的equals方法为equals(Object o)
如果没覆盖这个方法,自然调用不到。
sun0322 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jn789987 的回复:]
为什么非要是 Object???
[/Quote]

方法重载问题

参数不同,是两个方法

不能覆盖之前的方法!
jn789987 2010-07-05
  • 打赏
  • 举报
回复
为什么非要是 Object???
sun0322 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dyflovexlp 的回复:]
你的equals是方法错了...参数应该是(Object obj)
[/Quote]

学习了!

public boolean equals(Object o){
// if (this.id == p.getId()) {
// return true;
// } else {
// return false;
// }
Product p = (Product)o;
if (this.id == p.getId()) {
return true;
} else {
return false;
}

}


closewbq 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dyflovexlp 的回复:]
你的equals是方法错了...参数应该是(Object obj)
[/Quote]
对!
dyflovexlp 2010-07-05
  • 打赏
  • 举报
回复
你的equals是方法错了...参数应该是(Object obj)
dr_lou 2010-07-05
  • 打赏
  • 举报
回复
学习了,结贴。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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