2016-01-11 29 views
1

我有一個類SomeClass與靜態成員myMapenter code here具有從文件反序列化的形式HasmMap<String,ArrayList<SomeOtherClass>>如何正確返回Java中的ArrayList的一部分?

我有一個方法

public ArrayList<SomeOtherClass> getList(final String key, final int N) 

是應該查找在地圖key並返回相應ArrayList的第一N元素,或整個事情,如果列表中有<= N元素。我應該如何實現以下TODO行:

public ArrayList<SomeOtherClass> getList(final String key, final int N) 
{ 
    ArrayList<SomeOtherClass> arr = myMap.get(key); 
    if (arr == null) return null; 

    if (arr.size() <= N) 
    { 
     return arr; 
    } 
    else 
    { 
     // TODO: return first N elements 
    } 
} 

有效地做到這一點,即沒有內存中創建不需要的副本,而實際返回正確的數據?

+1

有一個'subList'方法。你可以使用它。 –

回答

8

Lists subList method創建一個子列表。

返回指定的fromIndex(包含)和toIndex(不包括)之間的此列表部分視圖。

返回的列表由此列表支持,因此返回列表中的非結構更改會反映在此列表中,反之亦然。

從索引0(包含開始索引)開始,並在索引N(獨佔結束索引)結束。

return arr.subList(0, N); 

這不會將項目複製到新列表;它會返回現有列表上的列表視圖。

+0

我得到'java.util.ArrayList $ SubList不能轉換爲java.util.ArrayList'。我可以用'return new ArrayList arr.subList(0,N)'替換'return arr.subList(0,N);'然後我會創建一個副本,對吧? –

+0

這是因爲'subList'返回的'List'不是'ArrayList'。你可以讓你的方法返回一個'List'而不是'ArrayList'。或者,您可以從子列表創建一個'ArrayList'並將其返回,但這涉及複製。 – rgettman