коллекция и карта - PullRequest
       2

коллекция и карта

1 голос
/ 22 января 2010

мы можем сделать коллекцию, которая реализует карту? Спасибо.

Ответы [ 4 ]

4 голосов
/ 22 января 2010

Карта по определению является «коллекцией». Однако если вы реализуете интерфейс Map , у вас не будет подкласса Collection, поскольку интерфейс Map не расширяет интерфейс Collection . Причина этого в том, что карты работают на парах ключ-значение, а коллекции - это просто отдельные объекты, сгруппированные вместе.

Существуют также некоторые конфликты между интерфейсами Map и Collection. Например, вы должны иметь реализацию toArray, которая для меня не имеет смысла на карте. Кроме того, методы remove имеют разные подписи.

2 голосов
/ 22 января 2010

Есть два способа понять вопрос.

На техническом уровне может ли класс реализовать оба интерфейса одновременно? Нет, поскольку метод удаления несовместим между двумя интерфейсами (один возвращает объект, другой - логический).

На концептуальном уровне Map.EntrySet Карты является своего рода представлением Коллекции Карты, поэтому вы можете использовать его, когда вам нужна Коллекция.

Если вы просто хотите получить коллекцию значений на карте, просто используйте метод Map.values ​​().

1 голос
/ 22 января 2010

Это невозможно из-за несовместимости с типом возврата в методе удаления в интерфейсе Collection и Map с одинаковой подписью.

.

Тип возврата boolean

java.util.Collection
public boolean remove(Object o)

.

Тип возврата java.lang.Object

java.util.Map
public Object remove(Object key)
1 голос
/ 22 января 2010

Да, вы можете реализовать два разных интерфейса с одним классом. Редактировать : за исключением несовместимости в методе удаления.(спасибо Томас)

Но в этом случае вы можете использовать некоторую реализацию Map и использовать тот факт, что Map.entrySet (), Map.keySet () и Map.values ​​() возвращают записи, ключи иколлекция значений соответственно.

Это зависит от того, к чему вы можете получить доступ и как, от интересующей вас коллекции.

Если вам нужен упорядоченный доступ к набору ключей, вероятно, вам следует использовать TreeMap, который сохраняети заказал дерево ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...