2012-10-30 28 views
10

Tôi đã học về HashMaps gần đây nhưng tôi có một câu hỏi mà dường như tôi không thể có được câu trả lời rõ ràng. Sự khác biệt chính giữa -Các cách khác nhau để tạo HashMaps

HashMap hash1 = new HashMap(); 

vs

HashMap<,>hash1 = new HashMap <,>(); //Filled in with whatever Key and Value you want. 

Tôi nghĩ khi bạn xác định một HashMap nó đòi hỏi Key và Value. Bất kì sự trợ giúp nào đều được đánh giá cao. Cảm ơn bạn.

+2

mà ngôn ngữ? – Jasper

+0

Ngoài ra, thói quen tốt là khai báo biến Bản đồ - hãy xem nhanh [bài đăng này] (http://stackoverflow.com/questions/1348199/java-hashmap-vs-map-objects) để biết thêm thông tin. –

+0

Java và cảm ơn bạn đã đăng bài. – StaticGamedude

Trả lời

9

Bạn nên xem qua Java generics, nếu bạn không chỉ định các loại HashMap, cả khóa và giá trị sẽ là loại Object.

Vì vậy, nếu muốn một HashMap với Integer phím và String giá trị ví dụ:

HashMap<Integer, String> hashMap= new HashMap<Integer, String>(); 
+1

Ah bây giờ tôi thấy, câu trả lời này đã giúp, cảm ơn bạn. – StaticGamedude

+0

bạn được chào đón @StaticGamedude, bạn có thể xem xét đánh dấu nó là câu trả lời không? Dấu kiểm đó dưới phiếu bầu hữu ích :) – HericDenis

3

Xác định keyvalue loại phép cho loại an toàn hơn bằng cách cho phép thực thi thời gian biên dịch gõ.

Điều này giúp dễ dàng viết mã không vô tình trộn lẫn các loại khóa và giá trị, đồng thời giảm số lượng phôi mà bạn phải khai báo rõ ràng trong mã. Tuy nhiên, điều quan trọng cần lưu ý là các kiểm tra kiểu này chỉ là thời gian biên dịch, tức là khi ứng dụng đang chạy, JVM sẽ cho phép bạn sử dụng bất kỳ loại nào cho khóa và giá trị.

+0

+1 để có giải thích tốt về thời gian biên dịch và thời gian chạy. – HericDenis

1

-Generics có thể ngụ ý đến các lớp học, giao diện, phương pháp, các biến vv .. nhưng lý do quan trọng nhất mà sử dụng của nó là làm cho Collection hơn loại an toàn.

-Generics chắc chắn rằng loại chỉ cụ thể của đối tượng đi vào và đi ra của Collections.

- Hơn nữa giá trị của nó đề cập rằng có một quá trình gọi là Erasure,

->Erasure là một quá trình mà các type parameterstype argumentsra khỏi lớp học chung chung và giao diện bởi trình biên dịch, làm cho nó trở lại tương thích với các mã được viết mà không cần Generics.

Vì vậy,

HashMap<String, Integer> map = new HashMap<String, Integer>();

trở thành của Raw type,

HashMap map = new HashMap();

15

Đó là những tùy chọn bạn có:

J2SE < 5.0 phong cách:

Map map = new HashMap(); 

J2SE 5.0 trở lên phong cách (sử dụng generics):

Map<KeyType, ValueType> map = new HashMap<KeyType, ValueType>(); 

Google Guava phong cách (ngắn hơn và linh hoạt hơn):

Map<KeyType, ValueType> map = Maps.newHashMap(); 
Các vấn đề liên quan