2012-03-04 27 views
9

Tôi cần sử dụng Bản đồ trong Java cho Ứng dụng Android. Nhưng vấn đề là danh sách được sắp xếp tự động. Làm cách nào để sử dụng Maps để lấy dữ liệu theo cùng thứ tự như tôi đã chèn dữ liệu.Bản đồ (bộ sưu tập) duy trì Thứ tự chèn trong java

+0

nó có thể là khôn ngoan để đổi tên tiêu đề để phản ánh tốt hơn thực tế rằng bạn đang quan tâm đến một bản đồ duy trì chèn order –

+0

Danh sách nào được sắp xếp tự động? Đó có phải là vấn đề không? hoặc là một phần của câu hỏi * câu hỏi của bạn? * Câu hỏi vẫn chưa rõ ràng. – EJP

Trả lời

18

Bạn nên sử dụng LinkedHashMap cho mục đích này..Truy cập Android DocsJava Docs để biết thêm chi tiết.

5

LinkedHashMap duy trì thứ tự chèn.

+1

Không chỉ vậy, nó có một móc dễ dàng để xây dựng một bộ nhớ cache ra khỏi nó. Rất đẹp. – Argyle

2

Như bạn và tôi đã phát hiện ra, LinkedHashMap không hữu ích lắm. (Điểm về sự tồn tại của nó là gì, dù sao?)

Tôi có một hashlist (ngữ nghĩa, tôi nghĩ rằng nó nên được gọi hashedlist)

http://code.google.com/p/synthfuljava/source/browse/trunk/gwt/util/org/synthful/gwt/util/HashList.java

Nó có một ArrayList và một hashmap. Danh sách mảng lưu trữ khóa.

Một hashlist.put (key, value) sẽ thực hiện

  • một map.put (key, value)
  • cũng như một list.add (key)

Một hashlist.get (int position) sẽ thực hiện - một map.get (list.get (position))

Đây là một sự đơn giản hóa của các lớp HashVector và HashTree mà tôi đã viết vào năm 2003 khi tôi cần thiết để tạo mô hình javascript và các đối tượng xml trong Java, giữ lại thứ tự của chúng. Tuy nhiên, tôi không tìm thấy thời gian hoặc sự cần thiết để đơn giản hóa hashtree cho khả năng tuần tự gwt.

Trên suy nghĩ thứ hai, GWT triển khai hashmap như thế nào? Tôi nghĩ rằng khi tôi có thời gian, tôi cần phải thay thế hashmap bằng faststringmap. Faststringmap của Google không công khai. Nó dành cho việc sử dụng riêng của trình biên dịch GWT. Vì vậy, bạn phải sao chép mã của nó và thay đổi nó thành một lớp công cộng: http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/user/client/ui/FastStringMap.java

http://jectbd.com/?p=95

Có thể, biên dịch GWT sẽ âm thầm sử dụng nó anyway - Tôi nên bận tâm để quản lý vi mô trình biên dịch thay thế hashmap với faststringmap?

BTW,

Bạn vẫn có thể tìm kiếm các hashtree bởi googling "googlecode synthful hashtree".

Hashtree cho phép bạn tạo một cây đối tượng và cho phép bạn truy xuất đối tượng của mình bằng cách sử dụng đường dẫn xpath theo đường chấm điểm.

hashtree.get("hello.dolly.how.are.you"); 

Các tách có thể xác định lại để bạn có thể lưu trữ hoặc được sử dụng

hashtree.get("hello/dolly/how/are/you"); 
hashtree.put("hello/dolly/how/are/you", value); 
+1

Có vẻ như bạn không hiểu mục đích của LinkedHashMap, bạn mong đợi điều gì từ nó? –

+0

Thực sự tò mò, khía cạnh nào của LinkedHashMap làm cho nó không phù hợp với mục đích của OP? –

+0

linkedhashmap.insert (6, khóa, giá trị)? linkedhashmap.remove (7)? linkedhashmap.put (20, khóa, giá trị)? Có vẻ như tôi không hiểu mục đích của các cửa sổ MS khi tôi có thể sử dụng Linux. –

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