我的班级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
}
}
有效地做到这一点,即在实际返回正确数据的同时不在内存中创建不需要的副本?
答案 0 :(得分:12)
使用List
s subList
method创建子列表。
返回指定fromIndex(包含)和toIndex(独占)之间此列表部分的视图。
返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。
从索引0(包括起始索引)开始,以索引N
结束(独占结束索引)。
return arr.subList(0, N);
这不会将项目复制到新列表;它返回现有列表的列表视图。
答案 1 :(得分:5)
return arr.subList(0, N);
文档是你的朋友。
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#subList(int,%20int)