2012-06-30 50 views
6

sự khác biệt giữa điều này là gì:EnumMap vs Enum giá trị

public enum Direction { 
    NORTH(90), 
    EAST(0), 
    SOUTH(270), 
    WEST(180); 

    private final int degree_; 

    private Direction(int degree) { 
     degree_ = degree; 
    } 

    public int getDegree() { 
     return degree_; 
    } 

    public static void main(String[] args) { 
     System.out.println(NORTH.getDegree()); 
    } 
} 

và điều này:

public enum Direction { 
    NORTH, 
    EAST, 
    SOUTH, 
    WEST; 

    public static void main(String[] args) { 
     EnumMap<Direction, int> directionToDegree = new EnumMap<Direction, int>(Direction.class); 
     directionToDegree.put(NORTH, 90); 
     directionToDegree.put(EAST, 0); 
     directionToDegree.put(SOUTH, 270); 
     directionToDegree.put(WEST, 180); 

     System.out.println(directionToDegree.get(NORTH)); 
    } 
} 

là một dễ đọc? Một linh hoạt hơn? Là một trong những sử dụng thông thường hơn? Có chạy nhanh hơn không? Bất kỳ ưu và khuyết điểm nào khác?

Trả lời

6

Trường hợp đầu tiên bạn có một thuộc tính được liên kết với giá trị enum (chỉ một giá trị).

Cách thứ hai bạn có liên kết giá trị với enum được quản lý bên ngoài.

Hãy tưởng tượng ngay trong ứng dụng của bạn mà bạn muốn truy cập các giá trị này. Nếu điều này là không đổi trong trường hợp thứ hai thì sẽ phức tạp hơn nhiều khi tham khảo bản đồ từ mọi nơi.

Cách tiếp cận thứ hai sẽ hữu ích khi bạn có các ngữ cảnh khác nhau. Ví dụ: NORTH, trong một ngữ cảnh cụ thể NORTH phải là 90, nhưng trong một ngữ cảnh khác, nó sẽ được yêu cầu một giá trị khác liên quan đến nó (ngữ cảnh ở đây có thể là triển khai cụ thể).

+0

tại sao tài sản "bị chặn"? Đây có phải là lỗi đánh máy cho "ngoại quan" không? Không hái nit, tò mò. – Thufir

+0

@Thufir: cảm ơn, đó là lỗi đánh máy –

+0

LOL, tôi nghĩ có một số ý nghĩa đặc biệt :) Tôi đã nghĩ đến giới hạn trên và dưới ..có – Thufir

6

Tự thêm các giá trị vào hằng số enum làm cho chúng có thể sử dụng được mà không cần tham chiếu đến đối tượng khác. Nếu bạn lưu trữ thông tin này trong bản đồ, bạn phải chuyển các tham chiếu đến bản đồ xung quanh. Nếu đây là những đặc tính cơ bản của các khái niệm mà các hằng số đại diện, thì tốt nhất nên tự thêm các giá trị vào các hằng số thay vì lưu trữ chúng trong một bản đồ.

Sử dụng giá trị trên hằng số enum sẽ nhanh hơn lưu trữ chúng trong bản đồ.

+0

Tại sao phương pháp đầu tiên sẽ nhanh hơn? – Geek

7

Trường hợp sử dụng chính cho EnumMap là khi bạn muốn đính kèm dữ liệu bổ sung vào enum bạn không sở hữu. Thông thường bạn đang sử dụng một thư viện công cộng có một enum và bạn cần chú thích mỗi thành viên với dữ liệu của bạn.

Như một quy tắc chung, bất cứ khi nào cả hai cách tiếp cận đều có sẵn cho bạn, hãy sử dụng phương pháp đầu tiên.

+0

Tôi tìm câu trả lời của bạn chứa đầy các ứng dụng thực tế khi làm gì? Cảm ơn và +1. – Geek

+0

Cảm ơn rất nhiều đó là giải thích tốt nhất mà tôi đã tìm thấy. – Heaven42

Các vấn đề liên quan