У меня есть класс с именем Node, который я написал. Я переопределил его функцию hashCode (), чтобы учесть два поля узла (есть также третье поле, которое не влияет на функцию my hashCode ()). Я также написал функцию equals (), которая учитывает все три поля.
Я пытаюсь использовать класс Hashtable для хранения узлов, чтобы впоследствии я мог легко проверить при создании новых узлов, являются ли новые узлы дубликатами узлов в хеш-таблице или нет. Пока у меня есть это
Hashtable<Node,Node> hashTbl = new Hashtable<Node,Node>();
...
Node node1 = // some new node
hashTbl.put(node1,node1);
...
Итак, скажем, я создаю новый узел с именем node2, который имеет точно такое же значение хеш-функции, что и node1, но не равен node1, как определено методом equals (). Я хочу проверить, является ли node2 дубликатом чего-либо в хеш-таблице (это не так), но если я использую constainsKey (), разве это не даст мне ложный положительный результат? Кажется, что использование containsValue () не будет использовать эффективность хэш-таблицы. Так как я могу сделать это эффективно?
Кроме того, я предполагаю, что когда я вызываю hashTbl.put (arg1, arg2), он вызывает функцию hashCode () arg1 и использует это значение, чтобы найти индекс в «массиве» для размещения arg2. Является ли это право?
Извините за то, что я немного запутался. Всем спасибо.