【发布时间】:2014-12-18 01:20:13
【问题描述】:
我有以下代码:
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” "
【问题讨论】:
-
Integer.MIN_VALUE 返回整数的最小值。 (即-2147483648)
-
是的,它也可能是 0,我只是放了最小值,因为 HashMap 映射中的值之一可能是负数
-
您希望得到
dois和dois2?HashMap将用dois2覆盖dois。请注意如何在 set 中检索键,因此只会存储唯一键。 -
不,我的意思是,它会为您提供可以设置整数的最小值。不是数组中最小的。
-
使用自定义比较器查看
TreeSet类。创建具有键和值的自定义类,并将其实例添加到 TreeSet。 TreeSet 总是排序的,因此您可以从顶部获取两个元素,它们将是最高的。注意:TreeSet 在 log(N) 时间提供添加、删除和包含操作。
标签: java