Làm thế nào để bạn tạo một từ điển trong Java? [đóng cửa]


236

Tôi đang cố gắng thực hiện một từ điển (như trong sách vật lý). Tôi có một danh sách các từ và nghĩa của chúng.

Cấu trúc / kiểu dữ liệu nào mà Java cung cấp để lưu trữ một danh sách các từ và nghĩa của chúng dưới dạng các cặp khóa / giá trị.

Làm thế nào, được cung cấp một khóa, tôi có thể tìm và trả lại giá trị?


24
Vâng, trên tinh thần tập trung vào câu hỏi, không phải người dùng, tôi đang bỏ phiếu để mở lại. Tôi chắc chắn rằng người dùng này đã hoàn thành khóa học cho đến bây giờ. ;) Đây là bản sao của stackoverflow.com/questions/1540673/ , nhưng tôi nghĩ câu trả lời ở đây tốt hơn.
Adi Inbar

Câu trả lời:


313

Bạn sẽ muốn a Map<String, String>. Các lớp thực hiện Mapgiao diện bao gồm (nhưng không giới hạn):

Mỗi cái được thiết kế / tối ưu hóa cho các tình huống nhất định (đi đến tài liệu tương ứng của chúng để biết thêm thông tin). HashMapcó lẽ là phổ biến nhất; đi đến mặc định.

Ví dụ: (sử dụng a HashMap):

Map<String, String> map = new HashMap<String, String>();
map.put("dog", "type of animal");
System.out.println(map.get("dog"));
loại động vật

1
@Cruncher Nó cũng thực hiện Map(kiểm tra javadoc)
arshajii

1
@arshajii tôi có nghi ngờ chúng tôi tự ánh xạ tất cả các chuỗi trong từ điển hoặc tôi có thể nói rằng chúng tôi lưu trữ thủ công nghĩa của tất cả các từ. Vì vậy, câu hỏi của tôi là, có cách nào như các tệp db (dump) của từ điển để tìm nạp các từ và nghĩa / định nghĩa của chúng để chúng ta có thể tránh thêm nghĩa của từng từ một cách thủ công
Vighanesh Gursale

@VighaneshGursale Bạn sẽ cần sử dụng phương thức put để xây dựng cấu trúc dữ liệu của mình trong quá trình miễn trừ. Hãy nghĩ về một lệnh put như đọc tệp từ đĩa và đặt nó vào bộ nhớ (ram) để bạn có thể làm việc với nó. Nếu bạn có một tệp bạn muốn được tải dưới dạng cấu trúc dữ liệu khi tải tự động, bạn muốn xem xét java mùa xuân nhưng nó phức tạp.
Dan Ciborowski - MSFT

5
Nhân tiện, bạn thực sự không cần bao gồm <Chuỗi, Chuỗi> lần thứ hai. Bạn chỉ có thể làmMap<String, String> map = new HashMap<>();
Samuel Noyes

Bạn đã quên đề cập đến ConcảnHashMap, cái nào thích hợp hơn để sử dụng trên Hashtable
Arsenius

80

Điều này tạo ra từ điển của văn bản (chuỗi):

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

sau đó bạn sử dụng nó như một:

dictionary.put("key", "value");
String value = dictionary.get("key");

Hoạt động nhưng đưa ra một lỗi bạn cần giữ cho lớp constructor giống như lớp khai báo. Tôi biết nó kế thừa từ lớp cha, nhưng thật không may, nó gây ra lỗi khi chạy.

Map<String, String> dictionary = new Map<String, String>();

Điều này hoạt động đúng.


3
dictionary["key"]sẽ không hoạt động - nó nên như vậy dictionary.get("key").
arshajii

21
Đúng, có lẽ một số C # đã trượt vào :)
SmartK8

12

Sử dụng giao diện Bản đồ và triển khai như HashMap


1
Liên kết đến một giải pháp được hoan nghênh, nhưng vui lòng đảm bảo câu trả lời của bạn hữu ích mà không cần đến nó: thêm ngữ cảnh xung quanh liên kết để người dùng đồng nghiệp của bạn sẽ có ý tưởng về nó là gì và tại sao lại có, sau đó trích dẫn phần có liên quan nhất của trang bạn ' liên kết lại trong trường hợp trang đích không có sẵn. Câu trả lời ít hơn một liên kết có thể bị xóa.
FelixSFD

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.