2011-07-06 22 views
5

Nếu tôi có một cấu trúc dữ liệuLàm cách nào tôi có thể lặp lại bắt đầu từ một khóa cụ thể trong LinkedHashMap?

Stock 
{ 
    String Symbol; 
    LinkedHashMap<Date,Double> DateForPrice; 
} 

Tôi biết trong LinkedHashMap, tôi có thể nhận được giá cổ phiếu của ngày cụ thể mà không cần đi qua toàn bộ danh sách.

Tuy nhiên, nếu tôi muốn lặp qua LinkedHashMap của DateForPrice bắt đầu từ một ngày cụ thể, có cách nào để thực hiện điều đó mà không vượt qua toàn bộ danh sách không?

+2

Thậm chí nếu bạn có thể nhảy đến một vị trí cụ thể, thứ tự lặp của 'LinkedHashMap' sẽ là * thứ tự chèn *, không phải thứ tự tự nhiên của các phím; đó là điều bạn muốn? –

+0

Vâng, đó là những gì tôi muốn. Giá cổ phiếu sẽ được chèn vào theo thứ tự ngày tháng. –

Trả lời

0

tôi muốn đề nghị sử dụng TreeMap thay - nó sẽ được sắp xếp theo ngày và bạn có thể sử dụng tailMap để có được những phần cần

7

LinkedHashMap không cung cấp một cách để bắt đầu lặp lại ở giữa xem ra lệnh của nó dữ liệu của bản đồ. Giả sử trường hợp sử dụng của bạn thực sự là bạn muốn tất cả các ngày sau một số Date d và để lặp lại những trường hợp đó, thì có thể bạn nên lưu trữ bản đồ của mình dưới dạng TreeMap. Sự khác biệt quan trọng ở đây là thứ tự của LinkedHashMap là thứ tự chèn và trường hợp sử dụng được cho là của chúng tôi ở đây là bạn muốn tự nhiên khóa đơn đặt hàng. TreeMap s duy trì chế độ xem như vậy, sắp xếp nội dung của bản đồ theo khóa của bản đồ.

TreeMap s có lợi ích bổ sung cho phép bạn tạo các bản đồ dựa trên khóa, vì vậy bạn có thể gọi tailMap(K k), để trả lại bản đồ với tất cả các phím xảy ra sau k. Trong trường hợp này, bạn có thể gọi tailMap với điểm xuất phát của mình, d.

ví dụ .:

TreeMap<Date, Double> dateForPrice; 

// load up dateForPrice 

Date start = // the point to start your iteration 

for(Entry<Date, Double> entry : dateForPrice.tailMap(start).entrySet()){ 
    // loop code 
} 

tailMap phương thức trả về SortedMap, mà không phải là iterable. Nhưng nó có phương thức entrySet trả lại Set, là phần con của Iterable.

thuận, nếu bạn muốn giữ lại lưu trữ dữ liệu của bạn trong một LinkedHashMap bạn chỉ có thể tải lên một TreeMap với ví dụ hiện tại của bạn (với một số cân bằng hiệu suất, tất nhiên):

TreeMap<Date, Double> dateSortedDateForPrice = new TreeMap<Date, Double>(dateForPrice); 
+0

ngoài tailMap() bạn có thể sử dụng subMap (Object fromKey, Object toKey), nếu bạn muốn ràng buộc bản đồ mới mà bạn đang tạo. http://download.oracle.com/javase/1.4.2/docs/api/java/util/TreeMap.html –

+1

+1: Đáng nói đến điều bạn thực sự muốn là bất kỳ NavigableMap nào, ví dụ: TreeMap. –

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