首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在堆栈中搜索

在堆栈中搜索
EN

Stack Overflow用户
提问于 2010-06-07 08:53:07
回答 3查看 3.1K关注 0票数 2

我已经创建了一个Java Stack,并向其中添加了一些自定义对象。这些对象包含唯一的id作为它们的字段之一。我需要根据唯一的名称获取该对象在堆栈中的索引。请找到示例。

代码语言:javascript
复制
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
}

}

有没有人能帮我实现这个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-07 09:14:41

首先,为TestVO类实现hashCode和equals方法:

代码语言:javascript
复制
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查找其索引:

代码语言:javascript
复制
int index = stack.indexOf(vo1);
票数 4
EN

Stack Overflow用户

发布于 2010-06-07 09:03:42

您可以对Stack使用search方法。它将返回该对象到堆栈顶部的距离。希望这已经足够好了。您将需要定义equals方法-这应该非常简单-只需对您的id字段进行比较。

Java API Documentation

票数 2
EN

Stack Overflow用户

发布于 2010-06-07 10:11:46

如果您打算将您的相等概念建立在uniqueId字段的基础上,那么您可能应该采取措施来确保该字段被正确初始化,并且一旦初始化它就不会改变。

如果您为字段提供了一个不受限制的设置器,那么在将TestVO对象插入到set或map中之后,如果某段代码更改了字段,您将会得到各种不正常的行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2986544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档