我有一个hashable包含一个字符串键和一个类对象值:
Hashtable<String,myclass>m_class_table = new Hashtable<String,myclass>();
在'myclass'里面我有一个String字段值,
我需要根据此字符串值对哈希表进行排序。
我不能只通过哈希表值对它进行排序,因为它是一个对象..
如何做到这一点?
感谢提前。
答案 0 :(得分:2)
我需要根据此字符串值对哈希表进行排序。
哈希表不是排序数据结构。
您可以使用某些SortedMap
,例如TreeMap
,但这些数据结构会对键进行排序,这样只有在键等于指向的对象的字符串字段时才会起作用。< / p>
我不能只按哈希表值对它进行排序,因为它是一个对象..
您需要提供Comparator<myclass>
,或让myclass
实施Comparable
界面。
根据您如何遍历哈希表,您可能会这样做:
List<myclass> myObjects = new ArrayList<myclass>(m_class_table.values());
Collections.sort(myObjects, new Comparator<myclass>() {
@Override
public int compare(myclass o1, myclass o2) {
o1.stringField.compareTo(o2.stringField);
}
});
然后遍历myObjects
列表。 (List
中的元素是有序的。)
答案 1 :(得分:1)
aioobe的答案稍有不同:我会创建一个Map条目列表并对该列表进行排序。这样你仍然可以访问完整的地图条目。
Map<String, MyClass> map = new HashMap<String, MyClass>();
// add some entries
List<Entry<String,MyClass>> entryList =
new ArrayList<Entry<String,MyClass>>(map.entrySet());
Collections.sort(entryList, new Comparator<Entry<String,MyClass>>() {
public int compare(
Entry<String, MyClass> first, Entry<String, MyClass> second) {
return first.getValue().getFoo()
.compareTo(second.getValue().getFoo());
}
});