Экземпляр установлен в Java? - PullRequest
6 голосов
/ 05 сентября 2011

Java определяет интерфейс Set, где contains() определяется следующим образом:

Возвращает true, если этот набор содержит указанный элемент.Более формально, возвращает true, если и только если этот набор содержит элемент e такой, что (o==null ? e==null : o.equals(e)).

Интерфейс Collection определяет contains() следующим образом:

Возвращает true, если эта коллекция содержит указанный элемент.Более формально, возвращает true, если и только если эта коллекция содержит хотя бы один элемент e такой, что (o==null ? e==null : o.equals(e)).

Мне нужен Java 'набор экземпляров', где contains() основан на == а не equals().Другими словами, набор жестких экземпляров, где два разных объекта A и B, где A.equals(B) могут сосуществовать в одном и том же наборе, поскольку A!=B.

Является ли такой «набор экземпляров» доставленным в Java или вкакая-то публичная библиотека?Я ничего не могу найти, но, может быть, кто-то знает лучше о SO.Если нет, я это реализую.Спасибо.

Ответы [ 2 ]

13 голосов
/ 05 сентября 2011

В JRE нет прямого "набора экземпляров".

Но существует IdentityHashMap, который реализует "карту экземпляров" в соответствии сВаша терминология.

И есть метод с именем Collections.newSetFromMap(), который может создать Set из произвольной Map реализации.

Таким образом, вы можете легко создать свой собственный набор экземпляров следующим образом:

Set<MyType> instanceSet = Collections.newSetFromMap(new IdentityHashMap<MyType,Boolean>());
1 голос
/ 05 сентября 2011

Вы можете просто реализовать метод equals следующим образом:

public boolean equals(Obect o) {
    return this == o;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...