我创建了一个Java Stack并添加了一些自定义对象。这些对象包含唯一的id作为其字段之一。我需要根据唯一名称在堆栈中获取该对象的索引。请找到例子。
class TestVO{
private String name;
private String uniqueId;
//getters and setters
}
public class TestStack{
public static void main(String args[]){
TestVO vo1=new TestVO();
TestVO vo2=new TestVO();
TestVO vo3=new TestVO();
vo1.setName("Test Name 1")
vo1.setId("123")
vo2.setName("Test name 2");
vo2.setId("234");
Stack<TestVO> stack=new Stack<TestVO>();
stack.add(vo1);
stack.add(vo2);
//I need to get the index of a VO from stack using it's unique ID
}
}
有人可以帮我实现吗?
答案 0 :(得分:4)
首先,为TestVO
类实现hashCode和equals方法:
class TestVO{
private String name;
private String uniqueId;
public boolean hashCode() {
if (uniqueId == null) return 0;
return uniqueId.hashCode();
}
public boolean equals(Object o) {
if (o instanceof TestVO) {
TestVO other = (TestVO) o;
return o.uniqueId.equals(uniqueId);
}
return false;
}
//getters and setters
}
请注意,在equals方法中,您应添加额外的代码以检查o.uniqueId
是否为空。
现在,您可以使用以下代码使用uniqueId找到TestVO对象的索引:
int index = stack.indexOf(vo1);
答案 1 :(得分:2)
您可以对search
使用Stack
方法。它将返回该对象与堆栈顶部的距离。希望这很好。您需要定义equals
方法 - 这应该非常简单 - 只需在您的ID字段上进行比较。
答案 2 :(得分:2)
如果您要在uniqueId
字段上建立平等概念,那么您应该采取措施确保字段已正确初始化,并且一旦初始化它就不会更改。
如果为字段提供不受限制的setter,那么如果在将TestVO
对象插入集合或映射后某些代码更改字段,则会出现各种破坏行为。