Мне интересно, поскольку HashSet реализован с помощью экземпляра HashMap, какой ключ будет использоваться для помещения данных в HashSet.
я прошел по ссылке http://www.coderanch.com/t/251832/Programmer-Certification-SCJP/certification/Difference-HashMap-HashSet...
что я правильно понял .. Кто-нибудь может помочь мне лучше понять это
Из источника:
// Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); public boolean add(E e) { return map.put(e, PRESENT)==null; }
ключом будет объект, который вошел в сам хэш-набор, поскольку ключи карт являются наборами.
Идея состоит в том, чтобы использовать объект, который вы добавляете к HashSet, в качестве ключа HashMap. Таким образом, add, remove и contains работают в O (1).
HashSet
HashMap
add
remove
contains
Да ( исходный код здесь ). HashSet по сути является интерфейсом для набора ключей HashMap.
/** * HashSet is an implementation of a Set. All optional operations (adding and * removing) are supported. The elements can be any objects. */ public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable { private static final long serialVersionUID = -5024744406713321676L; transient HashMap<E, HashSet<E>> backingMap; // right here!