带有objecs字符串参数的对象值的java排序哈希表

时间:2011-05-25 09:16:32

标签: java hashtable

我有一个hashable包含一个字符串键和一个类对象值:

Hashtable<String,myclass>m_class_table = new Hashtable<String,myclass>();

在'myclass'里面我有一个String字段值,

我需要根据此字符串值对哈希表进行排序。

我不能只通过哈希表值对它进行排序,因为它是一个对象..

如何做到这一点?

感谢提前。

2 个答案:

答案 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());
    }
});