我有一个列表,其中包含两个Box
个不同的对象(它们在id,地址,数量上有所不同),我需要获取列表中最后一项的索引{{1但我总是得到两个对象是平等的
最后一个对象的索引是1
而不是0
:
为什么两个对象都相同,以及如何获取列表中最后一个框的索引?我错过了什么吗?
1
输出结果为:
## - ## boxList size:2
## - ##这两个框是等于
## - ## boxB id:1513682911061包装箱地址:DS / 1-1-1-1 / A,包装箱数量:120 x:0
## - ## boxB id:1513682911062包装箱地址:DS / 1-1-2-1 / A,包装箱数量:18 x:0
## - ## indexTemp:0
修改
System.out.println("##--## boxList size: " + boxList.size());
if( boxList.get(0).equals(boxList.get(1))){
System.out.println("##--## the both boxes are equals");
}
for(Box boxB: boxList){
System.out.println("##--## boxB id: " + boxB.id + " box address: " + boxB.store.address + " ,box quantity: " + boxB.quantity + " x: " + boxList.indexOf(boxB));
}
Box lastFirstLoop = boxList.get(1);
int indexTemp = boxList.indexOf(lastFirstLoop);
System.out.println("##--## indexTemp: " + indexTemp );
答案 0 :(得分:0)
假设“Box”是你的自定义类,你应该看看这里: https://stackoverflow.com/a/27609/6705466
它指导如何重写equals(Object o)和hashCode()。你总是应该一起覆盖它们,每当equals返回true时,hashCode应该是相同的。
我的另一个建议是,在访问列表中的索引之前添加一点if语句(只是为了避免IndexOutOufBoundsException,可能是null检查会很好)
答案 1 :(得分:0)
First of all you need to **Override** your equals() method since **Box** is your Custom class. If you want to use .equals() method properly. Example is shown below:
class Box {
/*your class body*/
// Overriding equals() to compare two Box objects
@Override
public boolean equals(Object o) {
Box box = (Box) o;
if(id.equals(box.id)){
return true;
}
return false;
}
}
对于indexOf()方法,您需要覆盖hashCode()方法。如下所示:
@Override
public int hashCode() {
return Objects.hash(id);
}