从带有subList和removeRange的arrayList返回段

时间:2016-07-01 18:40:12

标签: java arraylist

我尝试通过索引从arrayList获取段并保留对原始arrayList的引用,但是当我使用subList时,它返回list 。我想保留arrayList结构。为此,做了一个强制转换(错误: java.util.ArrayList $ SubList无法强制转换为java.util.ArrayList

源代码:

ArrayList< Integer > TAB = new ArrayList< Integer >();
ArrayList< Integer > TAB_Segment = new ArrayList< Integer >();

TAB.add(new Integer( 0 ));
TAB.add(new Integer( 1 ));
TAB.add(new Integer( 2 ));
TAB.add(new Integer( 4 ));
TAB.add(new Integer( 5 ));

TAB_Segment = TAB.subList(0,2); // error
TAB_Segment = (ArrayList<Integer>) TAB.subList(0,2); // error java.util.ArrayList$SubList cannot be cast to java.util.ArrayList)

为了保留我的arrayList结构,我找到了removeRange。可悲的是,这个功能并没有返回任何东西,它与我真正需要的东西相反。那么,有没有办法实现我的目标?

1 个答案:

答案 0 :(得分:0)

您正在编写类ArrayList而不是接口List ... 这就是导致代码中出现问题的漏洞设计的原因...因为你需要将List转换为ArrayList 改变这个:

ArrayList< Integer > TAB = new ArrayList< Integer >();
ArrayList< Integer > TAB_Segment = new ArrayList< Integer >();

这个

List<Integer> TAB = new ArrayList<Integer >();
List<Integer> TAB_Segment = new ArrayList<Integer >();

将解决漏洞问题......

实施例

public static void main(String[] args) {
List<Integer> TAB = new ArrayList<>();
List<Integer> TAB_Segment = new ArrayList<>();

TAB.add(new Integer(0));
TAB.add(new Integer(1));
TAB.add(new Integer(2));
TAB.add(new Integer(4));
TAB.add(new Integer(5));

TAB_Segment = TAB.subList(0, 2); // error
TAB_Segment = TAB.subList(0, 2); // error java.uti

}