2009-10-08 45 views
73

Tôi là người dùng thời gian dài của Python và thực sự thích cách mà các từ điển được sử dụng. Chúng rất trực quan và dễ sử dụng. Có một Java tốt tương đương với từ điển của python? Tôi đã nghe nói về những người sử dụng hashmaps và hashtables. Ai đó có thể giải thích sự giống nhau và khác biệt của việc sử dụng hashtables và hashmaps so với từ điển của python?Java Tương đương với từ điển Python

Trả lời

72

Lớp học dict của Python là việc triển khai tài liệu Python gọi chính thức "mapping types". Bên trong, dict được triển khai bằng cách sử dụng thẻ bắt đầu bằng #.

Lớp Java HashMap của Java là triển khai giao diện Map. Bên trong, HashMap được triển khai bằng cách sử dụng thẻ bắt đầu bằng #.

Có một vài khác biệt nhỏ về cú pháp và tôi tin rằng các triển khai được điều chỉnh hơi khác nhau, nhưng nhìn chung chúng hoàn toàn có thể thay thế được.

+9

Không có ví dụ nào được cung cấp: ( –

+1

@kami: –

+1

Một ví dụ minh họa tương đương java của từ điển python trong hành động Một câu trả lời hữu ích bao gồm một số ví dụ bởi vì hầu hết mọi người đến đây để xem các ví dụ và sử dụng chúng trong mã của họ –

3

Theo như tôi biết (tôi không thực sự sử dụng java) từ điển chỉ là một tên khác cho một hashmap/hashtable.

Lấy mã từ http://www.fluffycat.com/Java/HashMaps/ có vẻ như chúng được sử dụng theo cách tương tự, với một chút đĩa bổ sung java.

+2

Java thậm chí có một giao diện từ điển được thực hiện bởi Hashtable. HashMap thường được ưa thích, mặc dù. –

+0

@Michael Myers: Từ điển không được dùng nữa, Oracle khuyên bạn nên sử dụng Bản đồ thay vì http://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html –

4

Một điểm khác biệt giữa hai yêu cầu là dict có các yêu cầu khắt khe hơn về loại dữ liệu nào có thể hoạt động như một khóa. Java sẽ cho phép bất kỳ đối tượng nào hoạt động như một khóa - mặc dù bạn nên cẩn thận để đảm bảo rằng phương thức hashCode() của đối tượng trả về một giá trị duy nhất phản ánh trạng thái bên trong của đối tượng đó. Python yêu cầu các khóa để phù hợp với định nghĩa của nó là hashable, trong đó xác định rằng mã băm của đối tượng sẽ không bao giờ thay đổi trong suốt thời gian tồn tại của nó.

+1

Điều này đúng, nhưng nó không thực sự được thực thi bởi một trong hai ngôn ngữ. Rõ ràng trong phương thức 'hashCode()' của Java hoặc trong phương thức Python '__hash __()', bạn nên cố gắng trả về một giá trị duy nhất phản ánh trạng thái bên trong.Trong Java hoặc Python, nếu bạn có một đối tượng có thể thay đổi, nó có thể không phải là một khóa có thể dùng được, do đó, nó có ý nghĩa để ném một ngoại lệ từ phương thức 'hashCode()' hoặc '__hash __()'. –

10

Ý tưởng về từ điển và Bản đồ tương tự. Cả hai đều chứa các yếu tố như

key1:value1, key2:value2 ... and so on 

Trong Java, Map được thực hiện nhiều cách khác nhau như HashMap, hoặc TreeMap, vv put(), get() hoạt động tương tự như

Map map = new HashMap(); 
// Put elements to the map 
map.put("Ram", new Double(3434.34)); 
map.put("Krishna", new Double(123.22)); 
map.put("Hary", new Double(1378.00)); 
//to get elements 
map.get("Krishna"); # =123.22 
map.get("Hary"); # = 1378.00 

Xem tài liệu của HashMap trong java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

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