10

我有一个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
    }
}

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

4

2 回答 2

26

List使用ssubList方法创建一个子列表。

返回此列表在指定的 fromIndex(包括)和 toIndex(不包括)之间的部分的视图。

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

从索引 0 开始(包含起始索引),并在索引处结束N(不包含结束索引)。

return arr.subList(0, N);

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

于 2016-01-11T21:06:46.110 回答
5
return arr.subList(0, N);

文档是你的朋友。

https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#subList(int,%20int)

于 2016-01-11T21:09:24.503 回答