Сравнение размеров наборов, которые являются ключами и значениями карты - PullRequest
0 голосов
/ 09 апреля 2020

Рассмотрим карту m, где m имеет тип HashMap или TreeMap. Предположим, что s1 и s2 оба являются наборами типа HashSet или TreeSet, где s1 - это набор ключей в m, а s2 - набор соответствующих значений в m. Что должно быть правдой?

a. s1.size ()> s2.size ()

b. s1.size () <= s2.size () </p>

c. s1.size ()> = s2.size () Это правильный ответ.

d. s1.size () == s2.size ()

e. s1.size ()

Я думал, что это будет "b", поскольку ключ может иметь много значений, но оказывается, что ответ c, где может быть больше ключи, чем значения. Однако у меня возникают проблемы с пониманием предоставленного ответа (c). Может ли кто-нибудь помочь мне понять, почему b неверен, а c прав?

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Ключ может иметь только 1 значение. Значением может быть объект, который может содержать несколько вещей. Но у вас есть только 1 значение на ключ.

На карте ваши ключи гарантированно будут уникальными, но значения не обязательно должны быть уникальными. В следующем примере есть 3 уникальных ключа, но только 1 уникальное значение:

Map<String, String> map = new HashMap<>();
map.put("key1", "elephant");
map.put("key2", "elephant");
map.put("key3", "elephant");

Таким образом, если вы создаете набор из списка значений, единственным объектом в наборе будет «слон». Но если вы создадите Set из ключей, вы получите 3 объекта: «key1», «key2» и «key3». Таким образом, количество ключей больше, чем количество значений.

1 голос
/ 09 апреля 2020

У вас есть задом наперед: ключ имеет не более одного значения типа V. (Это V может быть контейнером, подобным набору или списку, но это одно значение на карте.) Несколько ключей могут иметь одно и то же значение (именно так и реализуется сам HashSet поверх HashMap).

...