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?