簡體   English   中英

如何創建固定長度數組值的Java Map?

[英]How to create Java Map of fixed-length array values?

我有一個程序需要存儲幾個簡單的int值並將每個值與一個String鍵相關聯。 目前我像這樣初始化這個成員:

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

然后用imageSizes.put("some key", new int[]{100, 200});類的東西附加到它上面imageSizes.put("some key", new int[]{100, 200});

我的問題是 - 有沒有辦法給這些值一個固定的長度? 我每個人只需要2個元素。 如果我嘗試在成員定義中為數組賦予長度,Java不喜歡語法。

此外,在這種情況下限制數組長度是否有任何好處,或者我只是在優化中過於熱心?

您可以將它包裝在一個簡單,可重復使用和自我記錄的類中:

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));
// ...

您可以使用擴展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);

new int[]僅在數組元素后跟大括號的構造中是合法的,編譯器可以計算多少。 在Map中,用於值的內存量只是引用的大小(32或64位),無論數組本身有多大。 因此,修復數組的大小不會改變地圖使用的內存量。 在C中,你可以聲明一個指針,然后為它分配更多或更少的內存(或忘記分配任何和崩潰); Java為您管理內存。

除了Bohemian的解決方案之外,您可能希望保護原始的put方法不受HashMap的影響,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM