una sublistas separar partir listas lista dividir como java arraylist sublist

java - sublistas - Conversión de una sublista de una ArrayList en una ArrayList



sublist java (3)

Estoy usando un ArrayList y estoy tratando de copiar una parte de él a otro ArrayList por lo tanto estoy usando:

sibling.keys = (ArrayList<Integer>) keys.subList(mid, this.num);

Donde "sibling.keys" es la nueva ArrayList y "keys or this.keys" es la ArrayList más antigua. Usé el casting porque el eclipse me dijo que hiciera eso, pero luego arroja una ClassCastException :

java.util.ArrayList $ SubList no se puede convertir a java.util.ArrayList

¿Algún consejo?


Obtiene la excepción de lanzamiento de clase porque está esperando una ArraList, mientras que ArrayList.subList () no devuelve ArrayList. Cambie sus sibling.keys de ArrayList a List , y debería funcionar bien. Esto evitará ClassCastException, así como tampoco lo necesitarás ni ningún lanzamiento.


Array.subList no devuelve una ArrayList , sino una List .

Entonces la siguiente línea funciona:

List<Integer> keys = (List<Integer>) keys.subList(mid, this.num);

Tenga en cuenta que el elenco es opcional.


subList devuelve una vista en una lista existente. No es una ArrayList . Puede crear una copia de este:

sibling.keys = new ArrayList<Integer>(keys.subList(mid, this.num));

O si está contento con el comportamiento de vista, intente cambiar el tipo de sibling.keys para que sea List<Integer> lugar de ArrayList<Integer> , para que no tenga que hacer la copia:

sibling.keys = keys.subList(mid, this.num);

Sin embargo, es importante que comprenda la diferencia: ¿va a mutar las sibling.keys (por ejemplo, agregarle valores o cambiar los elementos existentes)? ¿Vas a mutar las keys ? ¿Quieres que la mutación de una lista afecte a la otra?