gpt4 book ai didi

java - 如何获取HashMap中最高的两个值,进行排名

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:49 24 4
gpt4 key购买 nike

我有以下代码:

public class Tester {

public static void main(String[] args) {
HashMap<Integer,String> map = new HashMap<Integer,String>();

map.put(1, "one");
map.put(2, "twp");
map.put(2, "two2");

int highest = Integer.MIN_VALUE;
String highestString = null;
int secondHighest = Integer.MIN_VALUE;
String secondHighestString = null;

if (highest == Integer.MIN_VALUE){
highest = Collections.max(map.keySet() );
highestString = map.get(highest);
map.remove(highest);
}
if (secondHighest == Integer.MIN_VALUE ){
secondHighest = Collections.max(map.keySet() );
secondHighestString = map.get(secondHighest);
map.remove(secondHighest);
}

System.out.println(highest + highestString);
System.out.println(secondHighest + secondHighestString);


}

}

我无法像我尝试的那样返回两个最高值,因为似乎不可能只删除具有相同键的一个值,而且我还尝试交换它们(制作 HashMap 也不是最佳选择).我应该尝试使用任何其他类型的集合吗?

我也试过:

TreeSet<Tete> set = new TreeSet<Tete>();

set.add(new Tete("name1", 1));
set.add(new Tete("name2",4));
set.add(new Tete("name3",4));
set.add(new Tete("name4",12));

System.out.println(set.size());

假设“Tete”类只携带一个String和一个Integer,集合大小只有3,而不是预期的4。如果我打印每个数字,则不会打印“name3”,所以我无法返回 3 个最大值,例如,只会出现“name4”、“name2”和“name1”,但“name3”大于“name1” "

最佳答案

任何Map(包括HashMap)只能为任何键存储一个值。因此,在您的三个 map.put 调用之后,您的 map 中将只有两个元素:[1,"Um"][2,"dois2 "]。值 “dois” 将不再存在于 map 中。

如果您确实需要为每个键存储多个值,使用 Java 运行时执行此操作的方法是将每个键映射到一个值列表。

HashMap<Integer,ArrayList<String>> map = new HashMap<Integer,ArrayList<String>>();

这确实意味着向 map 添加值和删除值的代码更加复杂。添加一个值需要这样的代码:

ArrayList<String> list = map.get(key);
if (list == null) {
list = new ArrayList<String>();
map.put(key, list);
}
list.add(newValue);

移除一个值类似:需要获取列表,然后从ArrayList中移除值,只有当ArrayList' s 大小现在为 0。

备选方案:第三方库中有“多 map ”集合,例如 Apache Commons (javadoc)。或者,正如@Keenle 所建议的那样,您可以使用一个集合,其中键是包含两者 整数和字符串的对象。您必须为该对象编写类,但这会非常简单。

关于java - 如何获取HashMap<Integer,String>中最高的两个值,进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27537734/

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