思考說:這是一種在Java中創建只讀列表的方法嗎?在Java中
要創建AbstractList的只讀列表中,您必須農具get()和大小()。
它搞糊塗了,代碼如下:
public class CountingIntegerList
extends AbstractList<Integer> {
private int size;
public CountingIntegerList(int size) {
this.size = size < 0 ? 0 : size;
}
public Integer get(int index) {
return Integer.valueOf(index);
}
public int size() { return size; }
public static void main(String[] args) {
List list = new CountingIntegerList(30);
}
}
是列出一個只讀的目錄?爲什麼?
好吧,答案是肯定的,因爲我擴展了AbstractList
,如果set
或and
被調用,它會丟失UnsupportedOperationException
。如果我想得到一個不可修改的列表,Collections.unmodifiableList()
是一個不錯的選擇。但要記住,他們兩人都沒有深入一成不變:
List<StringBuilder> list = new ArrayList<StringBuilder>();
StringBuilder sb = new StringBuilder();
sb.append("hello");
list.add(sb);
System.out.println(list);
list = Collections.unmodifiableList(list);
sb.append("world");
System.out.println(list);
有在CountingIntegerList
一個flyweight pattern
。因爲每次get()
被調用,它從整型的valueOf()
源代碼獲得緩存:
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
是否是正確的?
這是可能的方法之一。 爲什麼?正如你所看到的,你不能添加任何元素到這個List ..(不是通過add方法。)我會建議有parameterised構造函數來接受初始List。否則你的不可修改列表將永遠不會有任何數據 – 2013-04-24 13:33:47
哪一部分讓你感到困惑? – mikej 2013-04-24 13:34:30
'你的不可修改列表將永遠不會有任何數據'? – znlyj 2013-04-24 13:39:50