Мне нужно значение Someclass на основе ключа. И ключ может быть строкой, логическим или другим объектом, поэтому я использовал объект в качестве ключа. Но у меня есть проблема, когда объект представляет собой строку. и у меня есть два объекта строки, который равен, но он должен возвращать другое значение, потому что это другой объект.
Код, который у меня есть:
Object k = new String("action");
Object l = new String("action");
Hashtable<Object,SomeClass> map = new Hashtable<Object, SomeClass>();
map.put(k,anObject1);
map.put(l,anObject2);
map.remove(k); // it is removing both with k and l.
когда я проверяю hashCode () обоих объектов, он возвращает одно и то же значение, что в конечном итоге не то, что я хочу.
Есть ли какое-нибудь решение этого? Нужно ли создавать новый класс, который переопределяет Equals () объекта? но, тем не менее, хэш-код. :( Проблема в том, что мне нужен hashCode, который возвращает другое значение для другого объекта.
Отредактировано:
Я делаю это, потому что мне нужно выполнить другое действие в зависимости от того, какая строка, но действие будет отличаться значением, возвращаемым картой с ключом.
Обновлено:
Хорошо, вот вся история, почему мне нужна эта странная вещь.
У меня есть экземпляр игрока и 3 экземпляра земли. Поэтому я хотел, чтобы игрок пахал land1, land2, land3. Если игрок хотел вспахать землю, эта земля создала бегущую нить, которая велит игроку перейти на позицию X
и выполнить работу action
и wait()
с помощью объекта action
, а когда другой нить notify
эта нить по объекту action
, земля затем модифицирует себя. Затем игрок делает анимацию на основе объекта action
. У меня есть ArrayList<Position> destination
и «ArrayList action», чтобы получить его. Может быть, вы можете прочитать мой другой вопрос об этом здесь .
Итак, я хотел сделать действие отменяемым. Я реализую это, также передавая объект action
. У меня есть кнопка, которая отображается для каждого действия, и каждая кнопка отменит это действие. Я пропускаю action
здесь тоже. Поэтому, когда я нажму кнопку, земля получит notify
. Проблема в том, что я не могу заставить ArrayList<Position>
удалить пункт назначения с помощью Action
, потому что он не знает, где находится индекс. Я новичок в Java, но много использую C ++, поэтому я подумал об использовании Hashtables, потому что O (1) отличается от C ++ O (log n), и отчасти удобно, потому что в моем текущем коде не так много изменений.
Это понятно?