gpt4 book ai didi

java - 按值对元素进行排序的数据结构

转载 作者:行者123 更新时间:2023-12-01 06:50:37 25 4
gpt4 key购买 nike

我需要一个可以操作 String 的 Java 数据结构s,计算 ArrayList<String> 中每个单词的频率然后我需要根据频率对它们进行排序。

简单来说,数据结构需要是一个关联数组,可以按BY VALUES排序,我已经将这些行放入HashMap并对它无法排序这一事实感到惊讶,现在我不得不考虑另一种数据结构。

附注(使用两个列表不适合我的程序,因为它需要进行大量计算,因此如果单个结构保存每个 String 及其出现次数而不是 String 的列表和另一个频率)。

编辑:我很感谢您的帮助,但有些人建议 TreeMap ,所以我想在这里指定一些内容:我需要按字符串的出现次数排序的结构(在 Map 的情况下,它将是值而不是键)。

最佳答案

HashMap没有排序,实际上也不应该如此。如果您想对条目进行排序,您可以使用 SortedMap 之一实现,例如 TreeMap .

TreeMap有一个构造函数,可以在您遇到非标准 Comparator 时为您提供帮助(例如,如果您想要对 String 进行自然排序):

TreeMap(Comparator<? super K> comparator)

UPD:我忽略了一点,您需要按值对条目进行排序。

在这种情况下,我没有看到任何解决方案,除了一个解决方案,您只需对条目进行几次排序,但不必保持此状态。

您可以使用任何Map ,例如,保留 HashMap ,但是在处理之前,您可以对条目进行排序:

Set<Map.Entry<String, Integer>> entries = map.entrySet();
Set<Map.Entry<String, Integer>> sorted = new TreeSet<>(
Comparator.comparingInt(Map.Entry::getValue).reversed()); // it's Java 8, but you may extract this lambda
sorted.addAll(entries);
for (Map.Entry<String, Integer> entry: sorted) {
//...
// the entries will be sorted by value
}

准确地说,你不能做任何类型的Map维护以这种方式排序的条目,因为键的顺序仅设置一次并且您无法更改它,因为:

  1. 这非常规,Comparator/compareTo运算符应该在运行过程中给出相同的结果(这就是为什么可变类在 Map s 中不受欢迎的原因)
  2. 这不会给您带来明显的结果,键通常不会重新排序。

关于java - 按值对元素进行排序的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30477275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com