如何在Java中正确返回ArrayList的一部分?

时间:2016-01-11 21:03:55

标签: java arraylist sub-array

我的班级SomeClass有一个静态成员myMap enter code here,其格式为HasmMap<String,ArrayList<SomeOtherClass>>,可以从文件中反序列化。

我有一个方法

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

应该在地图中查找key并返回相应N的第一个ArrayList元素,或者如果列表包含<= 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
    }
}

有效地做到这一点,即在实际返回正确数据的同时不在内存中创建不需要的副本?

2 个答案:

答案 0 :(得分:12)

使用Lists subList method创建子列表。

  

返回指定fromIndex(包含)和toIndex(独占)之间此列表部分的视图。

     

返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。

从索引0(包括起始索引)开始,以索引N结束(独占结束索引)。

return arr.subList(0, N);

这不会将项目复制到新列表;它返回现有列表的列表视图。

答案 1 :(得分:5)