Искать в стеке - PullRequest
       35

Искать в стеке

2 голосов
/ 07 июня 2010

Я создал стек Java и добавил несколько пользовательских объектов. Эти объекты содержат уникальный идентификатор в качестве одного из своих полей. Мне нужно получить индекс этого объекта в стеке на основе уникального имени. Пожалуйста, найдите пример.

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 ]

4 голосов
/ 07 июня 2010

Сначала реализуйте методы hashCode и equals для класса TestVO:

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);
2 голосов
/ 07 июня 2010

Если вы собираетесь основывать свое понятие равенства на поле uniqueId, то вам, вероятно, следует предпринять шаги, чтобы убедиться, что поле правильно инициализировано и не меняется после его инициализации.

Если вы предоставите неограниченный установщик для поля, то вы получите все виды нарушенного поведения, если какой-то фрагмент кода изменит поле после того, как объект TestVO был вставлен в набор или карту.

2 голосов
/ 07 июня 2010

Вы можете использовать метод search для Stack.Он вернет расстояние этого объекта от вершины стека.Надеюсь, этого достаточно.Вам нужно будет определить метод equals - который должен быть довольно простым - просто сравните свое поле идентификатора.

Документация по Java API

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...