คำตอบสั้น ๆ
TreeMap
การใช้งาน นี่คือสิ่งที่มันต้องการ
หากแผนที่นี้ผ่านให้คุณและคุณไม่สามารถระบุประเภทได้คุณสามารถทำสิ่งต่อไปนี้:
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
สิ่งนี้จะวนซ้ำทั่วทั้งแผนที่ตามลำดับคีย์
คำตอบอีกต่อไป
เทคนิคคุณสามารถใช้สิ่งที่ดำเนินการSortedMap
แต่ยกเว้นกรณีที่หายากจำนวนนี้TreeMap
เช่นเดียวกับที่ใช้ดำเนินการมักจะมีจำนวน Map
HashMap
สำหรับกรณีที่คีย์ของคุณเป็นประเภทที่ซับซ้อนที่ไม่ได้ใช้การเปรียบเทียบหรือคุณไม่ต้องการที่จะใช้คำสั่งที่เป็นธรรมชาติแล้วTreeMap
และTreeSet
มีตัวสร้างเพิ่มเติมที่ช่วยให้คุณผ่านในComparator
:
// placed inline for the demonstration, but doesn't have to be a lambda expression
Comparator<Foo> comparator = (Foo o1, Foo o2) -> {
...
}
SortedSet<Foo> keys = new TreeSet<>(comparator);
keys.addAll(map.keySet());
จำได้ว่าเมื่อใช้TreeMap
หรือTreeSet
ว่ามันจะมีลักษณะการทำงานที่แตกต่างกันกว่าหรือHashMap
HashSet
พูดประมาณว่าการดำเนินงานพบหรือใส่องค์ประกอบจะไปจากO (1)เพื่อO (เข้าสู่ระบบ (N))
ใน a การHashMap
ย้ายจาก 1,000 รายการไปยัง 10,000 ไม่ได้ส่งผลกระทบต่อเวลาของคุณในการค้นหาองค์ประกอบ แต่สำหรับTreeMap
การค้นหาจะช้าลงประมาณ 3 เท่า (สมมติว่า Log 2 ) การย้ายจาก 1,000 เป็น 100,000 จะช้าลงประมาณ 6 เท่าสำหรับการค้นหาองค์ประกอบทั้งหมด