2010-08-26 34 views
8

Có phải hàm entriesSet() được gọi từ một cá thể sơ đồ trang web trả về một TreeSet của mục nhập hoặc đơn giản là một tập hợp các mục nhập.Đơn đặt hàng có được đảm bảo không?Có một mục nhập TreeMap() trả về một TreeSet

Thay vì nhận nó như một tập hợp các mục nhập, làm cách nào để có được danh sách các mục nhập theo thứ tự?

+0

Bạn có thực sự có nghĩa là 'TreeSet' hay chỉ là' Set' với hành vi nhất định không? – skaffman

+0

Tôi chỉ có nghĩa là không cho dù nó sẽ được sắp xếp theo thứ tự hay không. – Emil

+0

@Emil có vẻ như tập hợp mục nhập được trả lại từ tập hợp đi kèm với thứ tự tự nhiên .... – Victor

Trả lời

7

Đó là cách khác xung quanh: TreeSet sử dụng TreeMap trong nội bộ. (Xem câu đầu tiên của TreeSet docs)

Không có nhiều Sun mã nguồn java Tôi có thể tìm thấy trên các trang web liên kết đến, nhưng đây là một số phiên bản trông như già:

Như bạn thấy, TreeMap định nghĩa một lớp bên trong được gọi là TreeMap.EntrySet chỉ mở rộng AbstractSet. Và không, nó không thực hiện SortedSet (nếu không có thể được xác định bởi hợp đồng SortedMap.entrySet()).

Nhưng để trả lời câu hỏi thực tế: có, thứ tự được đảm bảo như được chỉ định trong hợp đồng SortedMap.entrySet().


Cập nhật: liên kết javadoc cập nhật cho Java 8, nguồn vẫn còn Java 6

5

Từ JavaDoc:

public Set<Map.Entry<K,V>> entrySet()

Trả một cái nhìn Set của ánh xạ chứa trong bản đồ này. Bộ lặp của bộ trả về các mục nhập theo thứ tự khóa tăng dần.

+0

Điều này không làm cho nó trở thành TreeSet, mà đúng hơn là (và tôi không thể coi đó là một SortedSet). – Riduidel

+3

Phải, chắc chắn là một tập hợp được sắp xếp, nhưng không nhất thiết là một 'java.util.SortedSet' hoặc thậm chí là một TreeSet. –

0
Assert.assertFalse(new TreeMap().keySet() instanceof SortedSet); 
Assert.assertFalse(new TreeMap().keySet() instanceof TreeSet); //no need to assert 

Nhưng tập có trật tự thực sự.

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