在堆栈中搜索

时间:2010-06-07 00:53:07

标签: java stack

我创建了一个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
}

}

有人可以帮我实现吗?

3 个答案:

答案 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字段上进行比较。

Java API Documentation

答案 2 :(得分:2)

如果您要在uniqueId字段上建立平等概念,那么您应该采取措施确保字段已正确初始化,并且一旦初始化它就不会更改。

如果为字段提供不受限制的setter,那么如果在将TestVO对象插入集合或映射后某些代码更改字段,则会出现各种破坏行为。