[英]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.