2016-07-01 5 views
0

arrayListからセグメントを取得し、元のarrayListへの参照を保持していますが、subListを使用するとlistが返されます。私はarrayList構造を保ちたい。サブリストとremoveRangeを持つ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構造:そのためには、キャストjava.util.ArrayListの$サブリストはjava.util.ArrayListのにキャストすることができないエラー)を作っ、私はremoveRangeを見つける。残念ながら、この関数は何も返さず、実際に必要なものの逆を作ります。それで、私の目標に出席する方法はありますか?

+0

このメソッドは 'List'を返します。それを使用できない理由はありますか?これは、元の 'ArrayList'へのビューです。あるいは、サブリストから新しい 'ArrayList'を作成してください。 – pvg

答えて

0

ListListクラスリストにはプログラミングされていません... これは、コードの問題を引き起こす穴の悪い理由です...リストをArrayListにキャストする必要があるためです。 これを変更してください:穴の問題を解決します。この

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

ため

ArrayList<Integer> TAB = new ArrayList<Integer>(); 
ArrayList<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 

} 
+0

arrayListを直接操作するのは悪い設計です。 –

+2

いいえ、でもインターフェイスにプログラミングする必要があります.... http://stackoverflow.com/questions/1992384/program-to-an-interface-what-does-it-mean –

関連する問題