我已经创建了一个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
}
}有没有人能帮我实现这个?
发布于 2010-06-07 09:14:41
首先,为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是否为空。
现在,您可以使用以下代码使用TestVO对象的uniqueId查找其索引:
int index = stack.indexOf(vo1);发布于 2010-06-07 09:03:42
您可以对Stack使用search方法。它将返回该对象到堆栈顶部的距离。希望这已经足够好了。您将需要定义equals方法-这应该非常简单-只需对您的id字段进行比较。
Java API Documentation
发布于 2010-06-07 10:11:46
如果您打算将您的相等概念建立在uniqueId字段的基础上,那么您可能应该采取措施来确保该字段被正确初始化,并且一旦初始化它就不会改变。
如果您为字段提供了一个不受限制的设置器,那么在将TestVO对象插入到set或map中之后,如果某段代码更改了字段,您将会得到各种不正常的行为。
https://stackoverflow.com/questions/2986544
复制相似问题