это HashSet реализован через экземпляр HashMap - PullRequest
1 голос
/ 12 февраля 2010

Мне интересно, поскольку HashSet реализован с помощью экземпляра HashMap, какой ключ будет использоваться для помещения данных в HashSet.

я прошел по ссылке http://www.coderanch.com/t/251832/Programmer-Certification-SCJP/certification/Difference-HashMap-HashSet...

что я правильно понял .. Кто-нибудь может помочь мне лучше понять это

Ответы [ 4 ]

6 голосов
/ 12 февраля 2010

Из источника:

// 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;
}
5 голосов
/ 12 февраля 2010

ключом будет объект, который вошел в сам хэш-набор, поскольку ключи карт являются наборами.

1 голос
/ 12 февраля 2010

Идея состоит в том, чтобы использовать объект, который вы добавляете к HashSet, в качестве ключа HashMap. Таким образом, add, remove и contains работают в O (1).

0 голосов
/ 08 сентября 2010

Да ( исходный код здесь ). 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!
...