Java: 获取 HashMap 中 2 个最大值的索引
Java: Getting index of 2 highest values in HashMap
以下代码returns 前 2 个最大值的相同索引:
HashMap<Integer, Integer> S_List = new HashMap<Integer, Integer>();
S_List.put(3, 18);
S_List.put(9, 20);
S_List.put(11,20);
S_List.put(13,20);
S_List.put(15,20);
S_List.put(17,20);
S_List.put(19,20);
Map.Entry<Integer, Integer> maxEntry5 = null;
Map.Entry<Integer, Integer> maxEntry6 = null;
for (Map.Entry<Integer, Integer> entry : S_List.entrySet())
{
if (maxEntry5 == null || entry.getValue() > maxEntry5.getValue())
{
maxEntry5 = entry;
}
if (maxEntry6 == null || entry.getValue() > maxEntry6.getValue()
&& entry.getKey() != maxEntry5.getKey()) {
maxEntry6 = entry;
}
}
Entry5 和 Entry6 的输出都是 17=20,而应该是不同的索引。
还有一个附带问题,当所有值都是 20 时,如何为前 2 个值获取 2 个随机索引。
应该使用等号来比较对象。
if (maxEntry6 == null || entry.getValue() > maxEntry6.getValue()
&& ! entry.getKey().equals( maxEntry5.getKey())) {
maxEntry6 = entry;
}
但主要问题是逻辑:
if (maxEntry6 == null ||
entry.getValue() >= maxEntry6.getValue()
&& ! entry.getKey().equals( maxEntry5.getKey())) {
maxEntry6 = entry;
}
即使值相等,您也需要另一个键的值。
一个更简单的解决方案是单一的,如果:
if (maxEntry5 == null ||
entry.getValue() >= maxEntry5.getValue()) {
maxEntry6 = maxEntry5;
maxEntry5 = entry;
}
以下代码returns 前 2 个最大值的相同索引:
HashMap<Integer, Integer> S_List = new HashMap<Integer, Integer>();
S_List.put(3, 18);
S_List.put(9, 20);
S_List.put(11,20);
S_List.put(13,20);
S_List.put(15,20);
S_List.put(17,20);
S_List.put(19,20);
Map.Entry<Integer, Integer> maxEntry5 = null;
Map.Entry<Integer, Integer> maxEntry6 = null;
for (Map.Entry<Integer, Integer> entry : S_List.entrySet())
{
if (maxEntry5 == null || entry.getValue() > maxEntry5.getValue())
{
maxEntry5 = entry;
}
if (maxEntry6 == null || entry.getValue() > maxEntry6.getValue()
&& entry.getKey() != maxEntry5.getKey()) {
maxEntry6 = entry;
}
}
Entry5 和 Entry6 的输出都是 17=20,而应该是不同的索引。
还有一个附带问题,当所有值都是 20 时,如何为前 2 个值获取 2 个随机索引。
应该使用等号来比较对象。
if (maxEntry6 == null || entry.getValue() > maxEntry6.getValue()
&& ! entry.getKey().equals( maxEntry5.getKey())) {
maxEntry6 = entry;
}
但主要问题是逻辑:
if (maxEntry6 == null ||
entry.getValue() >= maxEntry6.getValue()
&& ! entry.getKey().equals( maxEntry5.getKey())) {
maxEntry6 = entry;
}
即使值相等,您也需要另一个键的值。
一个更简单的解决方案是单一的,如果:
if (maxEntry5 == null ||
entry.getValue() >= maxEntry5.getValue()) {
maxEntry6 = maxEntry5;
maxEntry5 = entry;
}