如何在 Java 中正确返回 ArrayList 的一部分?
Posted
技术标签:
【中文标题】如何在 Java 中正确返回 ArrayList 的一部分?【英文标题】:How to properly return part of ArrayList in Java? 【发布时间】:2016-04-16 07:44:41 【问题描述】:我有一个类 SomeClass
和一个静态成员 myMap
enter code here
,其形式为 HasmMap<String,ArrayList<SomeOtherClass>>
,它从文件中反序列化。
我有办法
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
要高效地执行此操作,即在实际返回正确数据的同时不在内存中创建不需要的副本?
【问题讨论】:
有一个subList
方法。你可以使用它。
【参考方案1】:
return arr.subList(0, N);
文档是你的朋友。
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#subList(int,%20int)
【讨论】:
【参考方案2】:使用List
s subList
method 创建一个子列表。
返回此列表在指定 fromIndex(包括)和 toIndex(不包括)之间部分的视图。
返回的列表是由这个列表支持的,所以返回列表中的非结构性变化会反映在这个列表中,反之亦然。
从索引 0(包含起始索引)开始,到索引 N
(不包含结束索引)结束。
return arr.subList(0, N);
这不会将项目复制到新列表;它返回现有列表的列表视图。
【讨论】:
我收到java.util.ArrayList$SubList cannot be cast to java.util.ArrayList
。我可以用return new ArrayList<SomeOtherClass> arr.subList(0, N);
替换return arr.subList(0, N);
,但我会创建一个副本,对吧?
这是因为subList
返回的List
不是ArrayList
。您可以让您的方法返回 List
而不是 ArrayList
。或者,您可以从子列表中创建一个 ArrayList
并将其返回,但这将涉及复制。以上是关于如何在 Java 中正确返回 ArrayList 的一部分?的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中不使用 Arraylist 的情况下为类制作动态数组,并且没有正确教授如何去做