public class MainClass {
public static void main(String[] args)throws Exception {
List<Integer> list = List.of(1, 3, 54, 54,5, 4,43);
System.out.println(list);
// Строка ниже не компилируется
//ArrayList<Integer> list1 = List.of(1, 3, 54, 54,5, 4,43);
Set<Integer> set = Set.of(1, 3, 54,5, 4,43);
System.out.println(set);
Map<String, String> map = Map.ofEntries(Map.entry("11", "111"), Map.entry("htfg", "222"));
System.out.println(map);
}
}
Насколько я знаю List, Set и Map - это интерфейсы , сами по себе не представляющие реализации, отсюда вопрос какой будет реализация например листа (список(если да , то какой) массив ?????)
The collections created using the factory methods are not commonly used implementations.
For example, the List is not an ArrayList and the Map is not a HashMap. Those are different implementations which are introduced in Java 9. These implementations are internal and their constructors have restricted access.
Конкретно в вашем случае это будет java.util.ImmutableCollections$ListN
метод of
возвращает приватные реализации, в примере с List.of(...)
, это не ArrayList
, но это list
основанный на массиве. Там же есть тонкости с вызовом например of
с одним аргументом, тогда возвращается коллекция вообще не из массива, коллекция которая хранит в себе значение которое вы передали как приватное поле. Тоже самое с сетами. Вот реализация of
для List
/**
* Returns an unmodifiable list containing zero elements.
*
* See <a href="#unmodifiable">Unmodifiable Lists</a> for details.
*
* @param <E> the {@code List}'s element type
* @return an empty {@code List}
*
* @since 9
*/
static <E> List<E> of() {
return ImmutableCollections.List0.instance();
}
Как видите, возвращает она List0
.
Такая же реализация и для Set
и для Map
, Set кстати возвращается не hash, а основанный на простом массиве
Вот метод который ищет эллемент в Set
который возвращает Set.of(...)
// returns index at which element is present; or if absent,
// (-i - 1) where i is location where element should be inserted.
// Callers are relying on this method to perform an implicit nullcheck
// of pe
private int probe(Object pe) {
int idx = Math.floorMod(pe.hashCode() ^ SALT, elements.length);
while (true) {
E ee = elements[idx];
if (ee == null) {
return -idx - 1;
} else if (pe.equals(ee)) {
return idx;
} else if (++idx == elements.length) {
idx = 0;
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Если Java используется в основном для back-end, то что использовать для front-end?
Есть функция foo, которая возвращает массив barБудет ли одинакова последовательность работы у цикла foreach, если в качестве иттерируемого объекта...
При попытке создать адаптер для RecyclerView возникают проблемы:
Просьба не ругать сильно, с XML не работал, только учусьПока иду от простого XmlPullParser что бы понять принцип работы