Я согласен с комментарием I82. То, что вам следует избегать ссылки B на родителя: это дублирование информации, которое обычно приводит только к неприятностям, но вам может понадобиться сделать это в вашем случае.
если вы оставите родительскую ссылку в B
, в отношении хэш-кодов вы должны полностью игнорировать родительскую ссылку и использовать внутренние переменные true B
для построения хеш-кода.
A
s - это только контейнеры, и их значение полностью определяется их содержимым, которое является значениями содержащихся B
s, и поэтому должны иметь свои хэш-ключи.
Если A
является неупорядоченным множеством, вы должны быть очень осторожны, чтобы хэш-код, который вы строили из значений B
(или [х7 хэш-коды]), не зависит от какого-либо заказа. Например, если хэш-код создается путем добавления и умножения хеш-кодов содержащихся B
в некоторой последовательности, вы должны сначала заказать хеш-коды, увеличив порядок перед вычислением результата сумм / умножений. Аналогично, A.equals(o)
не должен зависеть от порядка B
s (если неупорядоченный набор).
Обратите внимание, что если вы используете java.util.Collection
внутри A
, просто установите B
s, игнорируя родительскую ссылку, автоматически выдаст действительные хеш-коды A
, поскольку по умолчанию Collection
имеют хорошие хеш-коды (упорядочение или нет).