2012-02-27 35 views

Trả lời

11

Họ là tương tự, nhưng từ góc độ thiết kế, lớp Properties được coi là một trong những "sai lầm" của java, bởi vì nó là một Hashtable (chứ không phải sử dụng một Hashtable). Nó phải là một giao diện.

Luôn sử dụng trừu tượng nếu có thể, vì vậy đây được ưa thích:

Map<String, String> stuff = new HashMap<String, String>(); 

có xu hướng tránh sử dụng Properties trừ khi bạn tới.

+3

Bạn có nghĩa là Hashtable?:) (chính tả không nhất quán cũng là một ví dụ về các lỗi Java) – Lukasz

+0

LOL - Tôi không bao giờ nhận thấy rằng :) – Bohemian

2

Propeties mở rộng Hashtable, được đồng bộ hóa theo mặc định. HashMap không được đồng bộ hóa theo mặc định. Bạn đang giao dịch an toàn chủ đề được tích hợp sẵn để cải thiện hiệu suất nhỏ, một trong những khả năng bạn không thể đo lường.

Thuộc tính là lớp cũ hơn từ Java 1.0. HashMap là một phần của API bộ sưu tập mới hơn của Joshua Bloch.

0

java.util.Properties là một Hashtable<Object,Object> do đó bạn có thể xem nó như là một hình thức đồng bộ java.util.HashMap<String, String>

Thuộc tính là tốt đẹp để xử lý ... thuộc tính:) Nếu bạn sử dụng nó cho các mục đích khác, sau đó lựa chọn của bạn sẽ phụ thuộc vào đồng thời quản lý trong chương trình của bạn

2

Bạn có ConcurrentHashMap<String, String> hiện đại để đảm bảo an toàn cho luồng. Không thực sự sử dụng Properties trừ khi bạn đang sử dụng nó để đọc tệp .properties.

1

Properties lớp là một phần mở rộng của Hashtable, về cơ bản thêm chức năng viết + đọc từ một đĩa trong một định dạng tập hợp (cặp giá trị văn bản như thế này):

key1=value1 
key2=value2 

Nếu bạn muốn lưu nó vào đĩa và sử dụng định dạng đó, sau đó sử dụng Thuộc tính, nếu không hãy sử dụng HashMap hoặc Hashtable.

16

Có hai mục đích khác nhau của hai lớp tiện ích này. Bản đồ, hoặc trong trường hợp của bạn, HashMap là đối tượng lưu trữ mục đích chung, nơi bạn có khóa duy nhất và các giá trị mà chúng trỏ tới. HashMap có thể có bất kỳ loại đối tượng nào làm khóa và bất kỳ loại đối tượng nào làm giá trị của chúng.

java.util.Properties là, tuy nhiên, một bản đồ mục đích đặc biệt. Nó được phát triển để đọc/ghi từ/đến các tập tin thuộc tính. Nó có các phương pháp đặc biệt để làm như vậy [xem load(..)]. Bản đồ không.

Vì vậy, bạn có các tình huống khác nhau để sử dụng chúng. Các địa điểm mà bạn cần các thuộc tính để đọc, bạn nên đi với Thuộc tính. Và những nơi bạn muốn có các giá trị tra cứu được lưu trữ ngoài logic, bạn hãy truy cập HashMap<String, String>.

Không có quy tắc cứng và nhanh, bạn có thể sử dụng HashMap<String, String>Properties thay thế cho nhau. Nhưng với tư cách là kỹ sư, hãy sử dụng công cụ phù hợp cho nhiệm vụ.

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