Как напрямую инициализировать HashMap (в буквальном смысле)? [Дубликат]

Используя булеву алгебру, нетрудно показать, что:

A xor B = (not A and B) or (A and not B)


A B | f = notA and B | g = A and notB | f or g | A xor B    
----+----------------+----------------+--------+--------    
0 0 | 0              | 0              | 0      | 0    
0 1 | 1              | 0              | 1      | 1    
1 0 | 0              | 1              | 1      | 1    
1 1 | 0              | 0              | 0      | 0
926
задан Freedom_Ben 2 April 2018 в 18:51
поделиться

1 ответ

tl; доктор

Использование Map.of… методы в Java 9 и позже.

Map< String , String > animalSounds =
    Map.of(
        "dog"  , "bark" ,   // key , value
        "cat"  , "meow" ,   // key , value
        "bird" , "chirp"    // key , value
    )
;

Map.of

Java 9 добавил серию [1 125] Map.of статические методы сделать, что Вы хотите: Инстанцируют неизменного Map использующий литеральный синтаксис .

карта (набор записей) неизменна, таким образом, Вы не можете добавить или удалить записи после инстанцирования. Кроме того, ключ и значение каждой записи неизменны, не может быть изменен. Видят Javadoc для других правил, таких как, никакой НЕ АННУЛИРУЕТ позволенный, нет сделайте дубликаты ключа, позволенные, и итеративный порядок отображений произволен.

Позволяют нам посмотреть на эти методы, с помощью некоторых демонстрационных данных для карты дня недели человеку, которого мы ожидаем, будет работать в тот день.

Person alice = new Person( "Alice" );
Person bob = new Person( "Bob" );
Person carol = new Person( "Carol" );

Map.of()

Map.of создает пустое Map. Немодифицируемый, таким образом, Вы не можете добавить записи. Вот пример такой карты, пустой без записей.

Map < DayOfWeek, Person > dailyWorkerEmpty = Map.of();

dailyWorkerEmpty.toString (): {}

Map.of( … )

Map.of( k , v , k , v , …) несколько методов, которые берут 1 - 10 пар "ключ-значение". Вот пример двух записей.

Map < DayOfWeek, Person > weekendWorker = 
        Map.of( 
            DayOfWeek.SATURDAY , alice ,     // key , value
            DayOfWeek.SUNDAY , bob           // key , value
        )
;

weekendWorker.toString (): {SUNDAY=Person {называет =' Bob'}, SATURDAY=Person {называют =' Alice'}}

Map.ofEntries( … )

Map.ofEntries( Map.Entry , … ) , берет любое количество объектов, реализовывая Map.Entry интерфейс. Java связывает два класса, реализовывая тот интерфейс, один изменяемый, другое неизменное: AbstractMap.SimpleEntry , AbstractMap.SimpleImmutableEntry . Но мы не должны указывать реальный класс. Мы просто должны назвать Map.entry( k , v ) метод, передать наш ключ и наше значение, и мы возвращаем объект некоторого класса, реализовывая Map.Entry интерфейс.

Map < DayOfWeek, Person > weekdayWorker = Map.ofEntries(
        Map.entry( DayOfWeek.MONDAY , alice ) ,            // Call to `Map.entry` method returns an object implementing `Map.Entry`. 
        Map.entry( DayOfWeek.TUESDAY , bob ) ,
        Map.entry( DayOfWeek.WEDNESDAY , bob ) ,
        Map.entry( DayOfWeek.THURSDAY , carol ) ,
        Map.entry( DayOfWeek.FRIDAY , carol )
);

weekdayWorker.toString (): {WEDNESDAY=Person {называет =' Bob'}, TUESDAY=Person {называют =' Bob'}, THURSDAY=Person {называют =' Carol'}, FRIDAY=Person {называют =' Carol'}, MONDAY=Person {называют =' Alice'}}

Уведомление, что порядок итератора карт, произведенных через [1 121], не гарантирован. Записи имеют произвольный порядок. Не пишите код на основе замеченного порядка, поскольку документация предупреждает, что порядок подвержен изменениям.

Примечание, которое все эти Map.of… методы возвращают Map из [1 159] неуказанный класс . Базовый реальный класс может даже варьироваться от одной версии Java другому. Эта анонимность позволяет Java выбрать из различных реализаций, безотносительно оптимально соответствия Ваши конкретные данные. Например, если Ваши ключи прибывают из перечисление , Java мог бы использовать EnumMap под покрытиями.

0
ответ дан 19 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: