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?