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

How to properly return part of ArrayList in Java?

我有一个 class SomeClass 和一个静态成员 myMap enter code here,它具有从文件反序列化的形式 HasmMap<String,ArrayList<SomeOtherClass>>

我有办法

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

应该在地图中查找 key 和 return 相应 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
    }
}

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

使用 Lists subList method 创建子列表。

Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive.

The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa.

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

return arr.subList(0, N);

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

return arr.subList(0, N);

文档是你的朋友。

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