нужно выяснить «ключ» в структуре данных в Java

1

Я ищу структуру данных, где мне нужно хранить значения, а затем извлекать их на основе ключа. Но в моем случае мой ключ и значение будут такими же, поэтому я не могу использовать HashMap. HashSet также не полезен, потому что в этом случае мне нужно выполнить последовательный поиск, чтобы найти мой ключ. поэтому вот пример того, что я ищу:

class A{
   int x;
   int y;
   int z;

   equals(){
     //equals is overridden based only on int x and int y; and not on z.
   }
}

Class B{
  Map<A,z>mapA = new HasMap<>(A,z); - option 1 , not useful.
  //store values in mapA. my z is dummy, in fact I need only class A object on some condition match.

  fun(object k){
     if(mapA.containsValue(k))
     {
        /*here I need to get class object A if it matches with "k". There is no function available in map to get the key if it matches key. Also if I use HashSet, in that case I need to retrieve the value by iterating over the set which is not preferable. I wanted to achieve this search in O(1) or O(logn) */
     }
  }
}

Любые предложения будут высоко оценены.

Edit1: Hashset указывает только, присутствует ли ключ в коллекции или нет? это не дает мне ключ. Чтобы получить ключ, мне нужно перебирать коллекцию. Пожалуйста, исправьте меня, если я ошибаюсь.

  • 2
    С каких это пор HashSet требует последовательного поиска?
  • 1
    Поздравляю с размещением очень загадочного вопроса.
Показать ещё 1 комментарий
Теги:
data-structures
collections

2 ответа

5

Если ключ является значением, HashSet - именно то, что вам нужно. Поиск ключа займет O (1) ожидаемое время, как и любая хеш-таблица.

  • 2
    Чтобы уточнить, переопределения HashSet contains() для поиска хеша, который амортизируется O (1). Это не делает то же самое, что ArrayList.contains() . :-)
0

В этом случае мы можем использовать HashMap с <key,key> вместо <key,value>. Это поможет мне получить ключ от карты, используя ключ как значение. В моем случае мне нужно было что-то, чтобы мы могли получить значение за одну операцию без какой-либо итерации. Хотя карта может это сделать, но по дизайну предполагается действовать с двумя значениями, т.е. ключом и значением. Помимо MAP, в java нет другой структуры данных, которая может это сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню