2012-11-30 42 views
9

Cách sắp xếp TreeMap? nói ví dụ như bạn có bản đồ sau:TreeMap cách sắp xếp

TreeMap<String, Integer> treemap = new TreeMap<>(); 
treemap.put("lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 

Iterator ittwo = treemap.entrySet().iterator(); 
    while (ittwo.hasNext()) { 
    Map.Entry pairs = (Map.Entry)ittwo.next(); 
    System.out.println(pairs.getKey() + " = " + pairs.getValue()); 
    ittwo.remove(); 
} 

Kết quả của việc này là:

Jesper = 3 
Marc = 2 
lol = 1 

Vì vậy, nếu nó không theo thứ tự abc là những gì nó rồi?

Trả lời

23

Nó không chỉ là chữ cái, mà còn là chữ hoa/chữ thường nhạy cảm.

TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(); 
treemap.put("Lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 
treemap.put("lol1", 1); 
treemap.put("marc1", 2); 
treemap.put("jesper1", 3); 

Output:

Jesper = 3 
Lol = 1 
Marc = 2 
jesper1 = 3 
lol1 = 1 
marc1 = 2 

Vì vậy, nếu bạn không cần đến nó, bạn có thể sử dụng so sánh tùy chỉnh của bạn, và so sánh chuỗi trong trường hợp thấp hơn:

TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(new Comparator<String>() { 
    public int compare(String o1, String o2) { 
     return o1.toLowerCase().compareTo(o2.toLowerCase()); 
    } 
}); 
treemap.put("Lol", 1); 
treemap.put("Marc", 2); 
treemap.put("Jesper", 3); 
treemap.put("lol1", 1); 
treemap.put("marc1", 2); 
treemap.put("jesper1", 3); 

Output:

Jesper = 3 
jesper1 = 3 
Lol = 1 
lol1 = 1 
Marc = 2 
marc1 = 2 
+2

'Bộ so sánh mới () { so sánh công khai (Chuỗi o1, Chuỗi o2) { trả về o1.compareToIgnoreCase (o2); } } ' – Shawn

2

Khi bạn không vượt qua bất kỳ Comparator thông qua hàm tạo, do đó, điều này sẽ xây dựng một TreeMap mới bằng cách sử dụng thứ tự tự nhiên của khóa của nó.

Trong java thứ tự tự nhiên có nghĩa là lexicographical đơn đặt hàng.

1

bạn đang thực tế nhận được kết quả chính xác.

J(uppercase J)>M(uppercase M)>l(lowercase l). 

chữ hoa là lexcographically lớn hơn chữ thường

5

Như stated in the JavaDoc một TreeMap "... được sắp xếp theo thứ tự tự nhiên của phím của nó ..." (nhấn mạnh là của tôi).

Như vậy kết quả của bạn là đúng, trong ánh sáng mà chữ thường lsau hoa M trong UTF "bảng chữ cái".

Nếu bạn muốn ghi đè hành vi mặc định, bạn có thể cung cấp Comparator cho hàm tạo TreeMap.