Задачу то решил при помощи подсказок валидатора, но только прибавилось сомнений и немонимания. Вот их смысл:..
Я,так же как и мы все по условию задачи, завел мапу:
private transient HashMap<E, Object> map;
Это типа наша подкапотная база данных для нашей самодельной коллекции AmigoSet и далее работаю при реализации всех методов НА НЕЙ. везде методы нашей коллекции AmigoSet должны работать с какой то структурой данных. И они работают с нашей внутренней базой данных - map
Вот они все - 5 методов ниже. Тут для меня все просто и логично:
public boolean add (E e) { return null== map.put(e, PRESENT); }
@Override public Iterator iterator() { return map.keySet().iterator(); }
@Override public int size() { return map.size(); }
@Override public boolean isEmpty() { return map.isEmpty(); }
@Override public void clear() { map.clear(); }
Но с чем работают эти оставшиеся ниже 2 метода??. Понятно что мы их имеем в наследство от AbstractSet. Но с чем они работают, к чему обращаются за данными для проверки содержания (contains) (remove)?? Они же должны как то знать про map и взаимодействовать с ней по идее...
@Override public boolean contains(Object o) { return super.contains(o); }
@Override public boolean remove(Object o) { return super.remove(o); }
Помогите разобраться, натолкните на мысль. (Документацию посмотрел - яснее не стало)
Konstantin
28 уровень
С чем (какой базой/ структурой данных) работают наследуемые методы Абстрактных коллекций в нашем AmigoSet, если их не переопределяют.
Обсуждается
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
gts320
5 сентября 2019, 08:52
ok. Тогда по вашей реализации этих методов:
родительские методы у себя внутри используют итератор, метод получения которого вы определили.
Этот итератор формируется из вашей map: map.keySet().iterator();
+2
gts320
5 сентября 2019, 07:57
Эти методы знают и взаимодействуют с полем HashMap<E, Object> map:
@Override
public boolean contains(Object o) {
return map.containsKey(o);
}
@Override
public boolean remove(Object o) {
return map.remove(o) != null;
}
0
Konstantin
5 сентября 2019, 08:30
Если бы было так, то я бы не спрашивал. тут все понятно. Изначально я так и написал, но валидатор после первой неверной попытки заставил переписать эти 2 метода как раз в том виде который я выложил - без ссылки на map. и после этого принял. Возможно это был какой то баг.
0