如何创建固定长度数组值的Java Map?

时间:2011-09-23 05:09:48

标签: java arrays map

我有一个程序需要存储几个简单的int值并将每个值与String键相关联。目前我像这样初始化这个成员:

private Map<String, int[]> imageSizes = new HashMap<String, int[]>();

然后使用imageSizes.put("some key", new int[]{100, 200});

等附加到它上面

我的问题是 - 有没有办法给这些值一个固定的长度?我每个人只需要2个元素。如果我尝试在成员定义中为数组赋予长度,Java不喜欢语法。

此外,在这种情况下限制数组长度是否有任何好处,或者我在优化中是否过于热心?

4 个答案:

答案 0 :(得分:2)

您可以将其包装在一个简单,可重复使用且自我记录的类中:

public class Size {

    private int width;
    private int height;

    public Size(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public int getWidth() {
        return width;
    }

    public int getHeight() {
        return height;
    }

    // Add setters if necessary.
}

使用如下:

Map<String, Size> sizes = new HashMap<String, Size>();
sizes.put("some key", new Size(100, 200));
// ...

答案 1 :(得分:2)

您可以使用扩展HashMap的类并提供此特殊功能:

public class ImageHashMap extends HashMap<String, int[]> {
    public void putArray(String key, int a, int b) {
      put(key, new int[]{a, b});
    }
}

致电:

ImageHashMap im = new ImageHashMap();
im.putArray("some key", 100, 200);

答案 2 :(得分:2)

new int[]仅在数组元素后跟大括号的构造中是合法的,编译器可以计算多少。在Map中,用于值的内存量只是引用的大小(32或64位),无论数组有多大本身。因此,修复数组的大小不会改变地图使用的内存量。在C中,你可以声明一个指针,然后为它分配更多或更少的内存(或忘记分配任何和崩溃); Java为您管理内存。

答案 3 :(得分:0)

除了Bohemian的解决方案,您可能希望保护原始的put方法不受HashMap的影响:

@Override
public int[] put(String key, int[] value) {
    throw new UnsupportedOperationException("Sorry, operation not allowed.");
}