2012-02-11 30 views
1

如果我錯了,請糾正我。使用當由數組支持一個ArrayList,修改在結構上調用子列表(的結果)將拋出UnsupportedOperationExceptionArrayList和LinkedList中的java.util.List子列表(int,int)行爲

  • : 當讀取關於java.util.List方法和測試sublist(int fromIndex, int toIndex)我發現了以下結果。
  • 當使用LinkedList這是由具有鏈接的節點支持時,在結構上修改調用的結果sublist()不會拋出UnsupportedOperationException

是因爲添加元素爲ArrayList將從其中被加入的位置的右​​側的所有元素移位和這是影響sublist()邊界之外的陣列,同時在添加元素爲LinkedList的操作意味着只創建一個新節點,並且只通過修改其鄰居節點鏈接將其鏈接到列表中?

+0

請向我們展示一段簡短的自包含代碼片段,以演示其差異。 – 2012-02-11 23:54:05

+1

你的意思是'Arrays.asList'? – 2012-02-11 23:55:37

回答

1

修改從ArrayListsubList()不會拋出UnsupportedOperationException - 以下工作正常:

ArrayList list = new ArrayList(); 
    list.add("a"); 
    list.add("b"); 
    list.add("c"); 
    List sub = list.subList(1, 2); 
    sub.add("d"); 
+0

我正在使用Arrays.asList,有混亂。乾杯 – 2012-02-11 23:59:31

1

ArrayList支持添加在列表的中間元素與方法add(int index, E element),就像一個LinkedList一樣。無論哪種情況,子列表的界限都會受到影響,這不是問題。