-1

我有一个包含对象的哈希映射,我需要编写一个方法来返回具有某个最大值的 3 个对象(由另一种方法计算),我正在寻找最有效的数据结构来使用。

我需要的是一个可以保存 3 个排序值的数据结构,每次我添加一个大于其任何元素的值时,它都会将最小值推出并将新值放入适当的索引中。

是否有类似于我所描述的内容,或者我必须创建一个新对象来存储这些数据?

4

1 回答 1

0

似乎标准库中没有这样的东西。

但是做自己很容易!您只需创建一个大小为 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]
于 2013-08-24T04:57:52.200 回答