Используя булеву алгебру, нетрудно показать, что:
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
Использование 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
под покрытиями.