2015-12-22 19 views
8

Tôi đã sử dụng TreeMap trong đó khóa là String và giá trị là loại Integer. Khi tôi xuất ra đối tượng Map, nó không in theo thứ tự được sắp xếp.Tại sao TreeMap của tôi không phân loại?

Dưới đây là đoạn code tôi sử dụng:

TreeMap<String, Integer> m = new TreeMap<String, Integer>(); 
m.put("Hello", 1); 
m.put("world", 2); 
m.put("Zertt", 5); 
m.put("Hello", 1); 
m.put("world", 2); 
System.out.println("map : " + m); 

Tôi hy vọng sản lượng để được sắp xếp như thế này:

bản đồ: {Xin chào = 1, thế giới = 2, Zertt = 5}

Nhưng thay vào đó tôi có được điều này:

đồ: {Xin chào = 1, Zertt = 5, thế giới = 2}

+0

Nó đang sắp xếp :) – RobAu

Trả lời

16

Trật tự tự nhiên của String s là trường hợp nhạy cảm, vì vậy Z đến trước w (tất cả các trường hợp chữ hoa đi trước khi tất cả thấp hơn trường hợp chữ cái).

Sử dụng

TreeMap<String, Integer> m = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER); 

đối với trường hợp trật tự không nhạy cảm.

0

Sắp xếp trong đồ thị tre dựa trên thứ tự các khóa tự nhiên chứ không phải giá trị.

2

Javadoc nói: đồ

được sắp xếp theo thứ tự tự nhiên của phím của nó, hoặc bằng một sánh cung cấp tại thời gian tạo bản đồ, tùy thuộc vào constructor được sử dụng.

CHỈNH SỬA: Câu trả lời của Eran là đúng, Thứ tự chuỗi phân biệt chữ hoa chữ thường theo mặc định.

1

Như đã trả lời trước chuỗi tự nhiên phân biệt chữ hoa chữ thường. Tuy nhiên, nếu bạn muốn đặt hàng sâu sắc, bạn có thể cung cấp so sánh như thông số hàm tạo TreeMap:

Map<String, Integer> m = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER); 

p.s. Chú ý, khi sử dụng các phím trường hợp insentive trật tự sẽ so sánh insentive quá:

m.put("Hello", 1); 
m.put("helLo", 6); 

Kết quả là 6 và quan trọng là Hello

1

Có lẽ thông tin này sẽ rất hữu ích.

Trong TreeMap lớp chứa cấu trúc:

  1. TreeMap()

  2. TreeMap (Comparator comp)

  3. TreeMap (Bản đồ m)

  4. TreeMap (SortedMap sm)

Phương thức khởi tạo đầu tiên tạo bộ sưu tập trong đó tất cả các thành phần được sắp xếp theo thứ tự các khóa của chúng.

Phương thức khởi tạo thứ hai tạo bộ sưu tập trống, các thành phần của sẽ được sắp xếp theo luật, được xác định trong bộ so sánh truyền .

Hàm tạo thứ ba tạo TreeMap dựa trên Bản đồ hiện có.

Nhà xây dựng thứ tư tạo TreeMap dựa trên Bản đồ sắp xếp hiện tại, các yếu tố trong đó sẽ được sắp xếp theo luật được truyền SortedMap.

Lưu ý rằng các phím được sử dụng để sắp xếp, thay vì giá trị.

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