如何获取ArrayList
Java中的数组切片?具体来说,我想做这样的事情:
ArrayList<Integer> inputA = input.subList(0, input.size()/2);
// where 'input' is a prepouplated ArrayList<Integer>
Run Code Online (Sandbox Code Playgroud)
所以我希望这可以工作,但Java返回List
- 所以它是不兼容的.当我试图施展它时,Java不会让我.我需要ArrayList
- 我该怎么办?
Ste*_*n C 112
在Java中,最好使用接口类型而不是API中的具体类.
你的问题是你正在使用ArrayList
(可能在很多地方)你真正应用的地方List
.因此,您使用列表所属的不必要约束为自己创建了问题ArrayList
.
这是你的代码应该是这样的:
List input = new ArrayList(...);
public void doSomething(List input) {
List inputA = input.subList(0, input.size()/2);
...
}
this.doSomething(input);
Run Code Online (Sandbox Code Playgroud)
你提出的解决问题的"解决方案"是:
new ArrayList(input.subList(0, input.size()/2))
Run Code Online (Sandbox Code Playgroud)
这可以通过制作子列表的副本来实现.它不是正常意义上的切片.此外,如果子列表很大,那么制作副本将是昂贵的.
如果您受到无法更改的API的约束,那么您必须声明inputA
为ArrayList
,您可能能够实现ArrayList
该subList
方法返回其子类的自定义子类ArrayList
.然而:
ArrayList
.ArrayList
实例的相关位置,以创建子类的实例."复制阵列"解决方案更实用......请记住,这些不是真正的切片.
如果没有现有方法,那么我猜你可以从0迭代到input.size()/2
,获取每个连续元素并将其附加到新的ArrayList.
编辑:实际上,我认为您可以使用该List并使用它来使用ArrayList构造函数之一实例化一个新的ArrayList.
我找到了一种方法,如果您知道需要从ArrayList中删除的元素的startIndex和endIndex,
让al
是原始ArrayList和startIndex
,endIndex
是开始和结束索引被分别从阵列中移除:
al.subList(startIndex, endIndex + 1).clear();
Run Code Online (Sandbox Code Playgroud)