2011-11-29 28 views
14

Tôi muốn một số thứ mà tôi có thể chèn cặp khóa/giá trị và thứ tự là thứ tự mà tôi chèn các mục vào.Bộ sưu tập java có cặp khóa/giá trị và được sắp xếp theo thứ tự chèn

Tôi có nhìn thấy một số bài viết liên quan đến bản đồ, nhưng có vẻ như tôi phải viết so sánh của riêng tôi cho họ.

Tôi muốn mục đầu tiên tôi chèn là mục đầu tiên được lưu trữ và mục thứ 2 là mục thứ 2 trong bộ sưu tập, v.v.

+1

Đó là gọi là "LinkedHashMap" –

Trả lời

18

Hãy thử sử dụng một LinkedHashMap, từ javadocs:

bảng Hash và liên kết thực hiện danh sách các giao diện bản đồ, với trật tự lặp dự đoán được thực hiện Điều này khác với HashMap ở chỗ nó duy trì một gấp đôi liên kết danh sách chạy qua tất cả các mục nhập của nó. Danh sách liên kết này xác định thứ tự lặp lại, thường là thứ tự mà các phím được chèn vào bản đồ (thứ tự chèn).

7

Tại sao không chỉ tạo ra một class để chứa khóa và giá trị, sau đó lưu trữ chúng trong yêu cầu thực hiện List yêu thích của bạn?

class Pair { 
    Key k; 
    Value v; 
} 

List<Pair> stuff = new ArrayList<Pair>(); 

Pair p = new Pair(); 
... 
stuff.add(p); 
1

Có vẻ như bạn sẽ cần phải sử dụng một danh sách với một đối tượng tên/giá trị

List<NameValuePair> values = new Arraylist<NameValuePair>(); 

và sau đó sử dụng danh sách như bạn sẽ một danh sách bình thường

class NameValuePair { 
    private name; 
    private value; 

    ... get/set 
} 
+0

Tôi ủng hộ LinkedHashMap gợi ý, nhưng, nếu bạn đi tuyến đường này, hãy nhìn vào Map.Entry và mạnh mẽ xem xét việc sử dụng nó thay vì xác định lớp NameValuePair của riêng bạn. – user949300

+1

@ user949300: 'Map.Entry ' là một giao diện, không phải là một lớp và tôi không biết bất kỳ lớp JDK công khai nào thực hiện nó. Tôi đồng ý rằng 'NameValuePair' nên thực hiện nó, mặc dù. – ruakh

+2

@ruakh Kiểm tra AbstractMap.SimpleEntry và AbstractMap.SimpleImmutableEntry. – user949300

0

LinkedHashMap là đúng đắn loại dữ liệu struture mà bạn đang tìm kiếm! Vì nó mở rộng HashMap (cho phép bạn có một phần tử trong cặp khóa/giá trị) và duy trì một danh sách liên kết (cung cấp cho bạn thứ tự chèn) của các mục nhập.

Ngoài ra kiểm tra các loại sau đây của bản đồ để biết thêm thông tin:

https://docs.oracle.com/javase/8/docs/api/

Đến AbstractMap và kiểm tra những hiểu

HashMap & TreeMap

HashTable- http://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html

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