java 通过 objecs 字符串参数对具有对象值的哈希表进行排序

发布于 2024-11-09 14:15:58 字数 271 浏览 0 评论 0原文

我有一个包含字符串 key 和一个类对象值的哈希表:

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

在“myclass”内,我有一个字符串字段值,

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

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

如何做到这一点?

提前致谢。

I have an hashable that contains a string key , and a class object value:

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

inside 'myclass' I have a String field value,

I need to sort my hashtable according to this string value.

I can't just sort it by the hashtable values beacuse it is an object..

How can this be done?

Thank's In Advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我最亲爱的 2024-11-16 14:15:58

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

哈希表不是排序的数据结构。

您可以使用一些 SortedMap< /a>,例如 TreeMap但这些数据结构对键进行排序,因此只有当键等于所指向对象的字符串字段时才有效。

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

您需要提供一个Comparator,或者,让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 中的元素是有序的。)

I need to sort my hashtable according to this string value.

A hashtable is not a sorted data structure.

You can use some SortedMap, such as a TreeMap but those data structures sorts on the keys, so that will only work if the key equals the string-field of the object pointed to.

I can't just sort it by the hashtable values beacuse it is an object..

You need to provide a Comparator<myclass>, or, let myclass implement the Comparable interface.

Depending on how you iterate over the hash-table, you could perhaps do like this:

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);
    }
});

and then iterate over the myObjects list. (Elements in a List are ordered.)

眼泪都笑了 2024-11-16 14:15:58

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

A slight variation on aioobe's answer: I'd create a List of the Map entries and sort that list. That way you still have access to the complete map entries.

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());
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文