存储在散列映射中的3个最大值的最有效方法是什么? (Java)的

时间:2013-08-24 04:43:17

标签: java max sorted

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

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

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

1 个答案:

答案 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]
相关问题