Java EnumMap

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về lớp Java EnumMap và các hoạt động của nó với sự trợ giúp của các ví dụ.

Các EnumMaplớp học của khuôn khổ bộ sưu tập Java cung cấp một thực hiện bản đồ cho các yếu tố của một enum.

Trong EnumMap, các phần tử enum được sử dụng làm khóa . Nó thực hiện giao diện Bản đồ.

Trước khi chúng ta tìm hiểu về EnumMap, hãy đảm bảo bạn biết về Java Enums.

Tạo EnumMap

Để tạo một bản đồ enum, java.util.EnumMaptrước tiên chúng ta phải nhập gói. Sau khi chúng tôi nhập gói, đây là cách chúng tôi có thể tạo bản đồ enum trong Java.

 enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) EnumMap sizes = new EnumMap(Size.class); 

Trong ví dụ trên, chúng ta đã tạo một bản đồ enum có tên là các kích thước.

Đây,

  • Kích thước - các khóa của enum ánh xạ tới các giá trị
  • Số nguyên - các giá trị của bản đồ enum được liên kết với các khóa tương ứng

Phương thức của EnumMap

Các EnumMaplớp học cung cấp phương pháp đó cho phép chúng tôi thực hiện các yếu tố khác nhau trên bản đồ enum.

Chèn các phần tử vào EnumMap

  • put() - chèn ánh xạ khóa / giá trị được chỉ định (mục nhập) vào bản đồ enum
  • putAll() - chèn tất cả các mục của một bản đồ cụ thể vào bản đồ này

Ví dụ,

 import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes1 = new EnumMap(Size.class); // Using the put() Method sizes1.put(Size.SMALL, 28); sizes1.put(Size.MEDIUM, 32); System.out.println("EnumMap1: " + sizes1); EnumMap sizes2 = new EnumMap(Size.class); // Using the putAll() Method sizes2.putAll(sizes1); sizes2.put(Size.LARGE, 36); System.out.println("EnumMap2: " + sizes2); ) ) 

Đầu ra

 EnumMap1: (SMALL = 28, MEDIUM = 32) EnumMap2: (SMALL = 28, MEDIUM = 32, LARGE = 36) 

Trong ví dụ trên, chúng ta đã sử dụng putAll()phương thức để chèn tất cả các phần tử của bản đồ enum Size1 vào bản đồ enum có kích thước2.

Nó cũng có thể chèn các yếu tố từ các bản đồ khác như HashMap, TreeMap, vv để một bản đồ enum sử dụng putAll(). Tuy nhiên, tất cả các bản đồ phải có cùng kiểu enum.

Truy cập các phần tử EnumMap

1. Sử dụng entrySet (), keySet () và các giá trị ()

  • entrySet() - trả về một tập hợp tất cả các khóa / giá trị ánh xạ (mục nhập) của một bản đồ enum
  • keySet() - trả về một tập hợp tất cả các khóa của một bản đồ enum
  • values() - trả về một tập hợp tất cả các giá trị của một bản đồ enum

Ví dụ,

 import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the entrySet() Method System.out.println("Key/Value mappings: " + sizes.entrySet()); // Using the keySet() Method System.out.println("Keys: " + sizes.keySet()); // Using the values() Method System.out.println("Values: " + sizes.values()); ) ) 

Đầu ra

 EnumMap: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Ánh xạ khóa / giá trị: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Các phím: (SMALL, MEDIUM, LARGE, EXTRALARGE) Giá trị: (28, 32, 36, 40) 

2. Sử dụng phương thức get ()

Các get()phương thức trả về giá trị gắn liền với phím chỉ định. Nó trả về nullnếu không tìm thấy khóa được chỉ định.

Ví dụ,

 import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the get() Method int value = sizes.get(Size.MEDIUM); System.out.println("Value of MEDIUM: " + value); ) ) 

Đầu ra

 EnumMap: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Giá trị của MEDIUM: 32 

Loại bỏ các phần tử EnumMap

  • remove(key) - trả về và xóa mục nhập được liên kết với khóa được chỉ định khỏi bản đồ
  • remove(key, value) - chỉ xóa mục nhập khỏi bản đồ nếu khóa được chỉ định được ánh xạ tới giá trị được chỉ định và trả về giá trị boolean

Ví dụ,

 import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the remove() Method int value = sizes.remove(Size.MEDIUM); System.out.println("Removed Value: " + value); boolean result = sizes.remove(Size.SMALL, 28); System.out.println("Is the entry (SMALL=28) removed? " + result); System.out.println("Updated EnumMap: " + sizes); ) ) 

Đầu ra

EnumMap: (SMALL = 28, MEDIUM = 32, LARGE = 36, EXTRALARGE = 40) Đã xóa Giá trị: 32 Mục nhập (SMALL = 28) có bị xóa không? Bản đồ EnumMap cập nhật đúng: (LARGE = 36, EXTRALARGE = 40)

Thay thế các phần tử EnumMap

  • replace(key, value) - thay thế giá trị được liên kết với khóa được chỉ định bằng giá trị mới
  • replace(key, old, new) - chỉ thay thế giá trị cũ bằng giá trị mới nếu giá trị cũ đã được liên kết với khóa được chỉ định
  • replaceAll(function) - thay thế mỗi giá trị của bản đồ bằng kết quả của hàm được chỉ định
 import java.util.EnumMap; class Main ( enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) public static void main(String() args) ( // Creating an EnumMap of the Size enum EnumMap sizes = new EnumMap(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // Using the replace() Method sizes.replace(Size.MEDIUM, 30); sizes.replace(Size.LARGE, 36, 34); System.out.println("EnumMap using replace(): " + sizes); // Using the replaceAll() Method sizes.replaceAll((key, oldValue) -> oldValue + 3); System.out.println("EnumMap using replaceAll(): " + sizes); ) ) 

Đầu ra

 EnumMap: (SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40) EnumMap using replace(): (SMALL=28, MEDIUM=30, LARGE=34, EXTRALARGE=40) EnumMap using replaceAll(): (SMALL=31, MEDIUM=33, LARGE=37, EXTRALARGE=43) 

In the above program, notice the statement

 sizes.replaceAll((key, oldValue) -> oldValue + 3); 

Here, the method accesses all the entries of the map. It then replaces all the values with the new values provided by the lambda expressions.

Other Methods

Method Description
clone() Creates a copy of the EnumMap
containsKey() Searches the EnumMap for the specified key and returns a boolean result
containsValue() Searches the EnumMap for the specified value and returns a boolean result
size() Returns the size of the EnumMap
clear() Removes all the entries from the EnumMap

EnumSet Vs. EnumMap

Both the EnumSet and EnumMap class provides data structures to store enum values. However, there exist some major differences between them.

  • Enum set is represented internally as a sequence of bits, whereas the enum map is represented internally as arrays.
  • Enum set is created using its predefined methods like allOf(), noneOf(), of(), etc. However, an enum map is created using its constructor.

Clonable and Serializable Interfaces

The EnumMap class also implements Cloneable and Serializable interfaces.

Cloneable Interface

It allows the EnumMap class to make a copy of instances of the class.

Serializable Interface

Whenever Java objects need to be transmitted over a network, objects need to be converted into bits or bytes. This is because Java objects cannot be transmitted over the network.

Các Serializablegiao diện cho phép các lớp học để được đăng. Điều này có nghĩa là các đối tượng của các lớp thực thi Serializablecó thể được chuyển đổi thành bit hoặc byte.

thú vị bài viết...