我有一个包含对象的哈希映射,我需要编写一个方法来返回具有某个最大值的 3 个对象(由另一种方法计算),我正在寻找最有效的数据结构来使用。
我需要的是一个可以保存 3 个排序值的数据结构,每次我添加一个大于其任何元素的值时,它都会将最小值推出并将新值放入适当的索引中。
是否有类似于我所描述的内容,或者我必须创建一个新对象来存储这些数据?
似乎标准库中没有这样的东西。
但是做自己很容易!您只需创建一个大小为 4 的数组。然后向其中添加值。一旦它有 3 个值并且您尝试添加第 4 个值,请将其添加为第四个并对列表进行排序。现在,无论何时添加另一个值,只需覆盖第 4 个值并再次排序。
这是一个非常简短的示例脚本,应该可以为您提供思路:
import java.util.Arrays;
public class TempTest {
static int[] topThree = new int[4];
static public void addValue(int newVal) {
if (newVal > topThree[0]) {
topThree[0] = newVal;
Arrays.sort(topThree);
}
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
int newInt = (int) (Math.random() * 30);
System.out.println("Adding " + newInt);
addValue(newInt);
System.out.println(Arrays.toString(topThree));
}
}
}
输出结果:
Adding 23
[0, 0, 0, 23]
Adding 16
[0, 0, 16, 23]
Adding 2
[0, 2, 16, 23]
Adding 8
[2, 8, 16, 23]
Adding 28
[8, 16, 23, 28]
Adding 12
[12, 16, 23, 28]
Adding 0
[12, 16, 23, 28]
Adding 29
[16, 23, 28, 29]
Adding 6
[16, 23, 28, 29]
Adding 5
[16, 23, 28, 29]