如何获取ArrayListJava中的数组切片?具体来说,我想做这样的事情:
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)
| 归档时间: |
|
| 查看次数: |
97331 次 |
| 最近记录: |