我有一个包含对象的哈希映射,我需要编写一个方法,返回具有一定最大值的3个对象(由另一个方法计算),我正在寻找最有效的数据结构。
我需要的是一个可以容纳3个排序值的数据结构,每次我添加一个大于其任何元素的值时,它会将最小值推出并将新值放入正确的索引中。
是否有类似于我所描述的内容,或者我是否必须创建一个新对象来存储此数据?
答案 0 :(得分:0)
似乎标准库中没有这样的东西。
但是你自己很容易做到!您只需创建一个大小为4的数组。然后向其中添加值。一旦它有3个值并且您尝试添加第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]