Я посмотрел на ваш вопрос, и мне потребовалось некоторое время, чтобы подумать о том, что вы сказали. Итак, вот мое мнение относительно реализации HashSet
.
Необходимо, чтобы фиктивный экземпляр знал, есть ли значение в наборе или нет.
Взгляните в методе add
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
Теперь Abd посмотрим на возвращаемое значение put
@ возвращает предыдущее значение, связанное с ключом, или null, если не было отображение для ключа. (Нулевой возврат также может указывать, что ранее связанная карта с ключом.)
blockquote>Таким образом, объект
PRESENT
используется только для представления того, что набор содержит значение e. Я думаю, вы спросили, почему бы не использоватьnull
вместоPRESENT
. Но вы не сможете отличить, была ли запись ранее на карте, потому чтоmap.put(key,value)
всегда возвращалnull
, и у вас не было бы способа узнать, существовал ли ключ.
Сказав, что вы могли бы утверждать, что они могли использовать реализацию, подобную этой
public boolean add(E e) { if( map.containsKey(e) ) { return false; } map.put(e, null); return true; }
, я полагаю, что они тратят 4 байта, чтобы избежать вычисления хэш-кода, поскольку это может быть дорого, ключа два раза ( если ключ будет добавлен).
Если вы задали вопрос, почему они использовали
HashMap
, который будет тратить 8 байтов (из-заMap.Entry
) вместо некоторых других данных структура с использованием аналогичного входа только 4, то да, я бы сказал, что они сделали это по причинам, о которых вы упомянули.
вы не можете использовать scss в HTML-документе / элементе, так как вам нужно скомпилировать его в css ..
некоторое руководство по YouTube ниже. scss install и compile
был на самом деле странным, так как я очень давно злился, почему мой scss не работает .. я думал, что все дело в настройке сервера: S