2013-04-12 28 views
2

我正在閱讀solr的dataimporthandler組件的源代碼。我遇到一個問題爲什麼要返回數組的副本?

private List<String> readBySplit(String splitBy, String value) { 
    String[] vals = value.split(splitBy); 
    List<String> l = new ArrayList<String>(); 
    l.addAll(Arrays.asList(vals)); 
    return l; 
    } 

↑上市1(從RegexTransformer類的方法)

private List<String> readBySplit(String splitBy, String value) { 
    String[] vals = value.split(splitBy); 
    return Arrays.asList(vals); 
    } 

↑上市2(我覺得上面的方法應該是)

誰能告訴我是什麼顯著以上兩個代碼清單之間的區別?謝謝。

回答

7

Arrays.asList()Returns a fixed-size list backed by the specified array.

從javadoc中的。所以如果你想要一個動態大小的列表,你需要第一個代碼。

2

Arrays.asList()返回未修改列表的固定大小列表。你不能對它進行添加/刪除操作,這樣做會拋出ExceptionUnsupportedOperationException

所以,如果你想要做一些操作,其中該名單

+0

他仍然可以修改列表,只是不會更改大小 – akostadinov

+0

修改意味着添加/刪除。你不能在列表中添加/刪除 –

+0

嘗試:'\t \t String [] a = {「1」,「2」,「3」}; \t \t列表 b = Arrays.asList(a); \t \t b.set(1,「haha」); \t \t System.out.println(b);' – akostadinov

0

因爲它返回的固定大小list.You會得到你不能在通過代碼2列表返回添加任何東西「的java.lang你的第一種方法是適當的.UnsupportedOperationException Exception 「」但您可以在代碼1中添加返回列表。

相關問題