Ответ Равиндры дает хорошее объяснение для пункта 1. Комментировать вопрос 2:
Можно ли таким образом найти код ha sh?
Здесь что-то круглое. По крайней мере, один из этих 2 должен быть неправильным в контексте этой ошибки переполнения стека:
- , что код ha sh списка должен учитывать все его элементы
- все в порядке, если список является отдельным элементом
Теперь, поскольку мы имеем дело с ArrayList
, первая точка является фиксированной. Другими словами, может быть, вам нужна другая реализация, чтобы иметь возможность осмысленно вычислять код ha sh рекурсивного списка ... Можно расширить ArrayList
и пропустить добавление кодов элементов ha sh, что-то вроде
for (E e : this)
if(e == this) continue; //contrived rules
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
Используя такой класс вместо ArrayList
, вы могли бы.
С ArrayList
вторая точка неверна. Поэтому, если интервьюер имел в виду «Можно ли таким образом найти код ha sh (со списком массивов)?» , тогда ответ «нет», потому что это абсурд.