HASHSET: Как извлечь из каждого ведра. Хешкод хранится?JAVA

Программисты JAVA общаются здесь
Anonymous
HASHSET: Как извлечь из каждого ведра. Хешкод хранится?

Сообщение Anonymous »

In Java for a HashSet and HashMap must be overridden the hashCode() method of a custom class (i.e Person, Product, etc) to let the collection:
  • Store an element with the Добавить Метод (через Bucket )
  • Проверьте существование элемента с помощью метода содержимого (опять же через bucket )
, конечно, практически практически не соответствует изменению. /> Теперь в основном для LinkedHashset рассмотрим следующие коды фрагментов ( reaky )

Код: Выделить всё

Set products = new LinkedHashSet();
products.add(new Product("cod-001", "Guitar Samick", 100.00));
products.add(new Product("cod-002", "Guitar Bass Ibanez", 200.00));
products.add(new Product("cod-003", "Guitar Fender", 300.00));
products.add(new Product("cod-004", "Guitar Bass Fender", 400.00));
< /code>
о отчетности < /p>
for(Product product: products) {
System.out.println(product.toString() + " - " + product.hashCode());
}
Он выполняет простой отчет.

Код: Выделить всё

assertTrue(products.contains(new Product("cod-001", "Guitar Samick", 100.00))); //passes
assertTrue(products.contains(new Product("cod-002", "Guitar Bass Ibanez", 200.00))) //passes
assertTrue(products.contains(new Product("cod-003", "Guitar Fender", 300.00)));//passes
assertTrue(products.contains(new Product("cod-004", "Guitar Bass Fender", 400.00)));//passes
Потому что для метода содержит «два хэшкода» - это то же самое
  • hashcode , хранящийся в ковше. Вызовите) < /li>
    < /ul>
    Теперь сейчас из следующего вопроса < /p>

    /> Вполне вероятно, что ваш объект изменен, а реализация Hashcode () зависит от изменяющих полей. Итак, сначала вы поместили объект в набор, , затем изменил его, изменив свой хэшкод. Однако внутри хешса объект все еще сохраняется в старом ведре, которое число получено из исходного хешкода, поэтому его нельзя найти. как правило: никогда inemify объекты в хэште или объектах, используемых в качестве хашмапов . />

    Код: Выделить всё

    for(Product product: products) {
    //each element is edited +100 to the number
    product.setNumber(product.getNumber() + 100.00);
    }
    
    Поэтому следующий набор Asserttrue Методы не сбои (наблюдайте за каждым новым продуктом созданным объектом, который также имеет номер с +100)

    Код: Выделить всё

    assertTrue(products.contains(new Product("cod-001", "Guitar Samick", 200.00))); //fails
    assertTrue(products.contains(new Product("cod-002", "Guitar Bass Ibanez", 300.00))) //fails
    assertTrue(products.contains(new Product("cod-003", "Guitar Fender", 400.00)));//fails
    assertTrue(products.contains(new Product("cod-004", "Guitar Bass Fender", 500.00)));//fails
    
    , потому что для метода содержит метод «два хэшкода» - это не больше, чем

    Hashcode , хранящийся в ковше. hashcode элемента основан на состоянии new (известное с помощью продукта.hashcode () call)
Поэтому даже с тем же кодом для отчетности

for(Product product: products) {
System.out.println(product.toString() + " - " + product.hashCode());
}

Он сообщает о new hashcode каждого элемента, но у каждого bucket есть old hashcode все еще
Примечание Я знаю правильный подход к тому, чтобы добавить элемент. /> Теперь для Academic и исследования целей, если возможно
Вопрос

[*] Как получить из каждого ведра, хэшкода, хранящей Список/массивы хэшкодов

один из всех ведер (запрос в этом вопросе)
Другое из всех элементов (уже возможно с продуктом.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ode-stored

Вернуться в «JAVA»