Hace poco me enteré de que en realidad hay 2 diferentes ArrayList implementaciones en Java (mejor tarde que nunca, supongo…).

Así que me preguntaba ¿por qué Arrays.asList(T... a) de devolución de una lista que no se pueden cambiar de tamaño ? Si necesitaban un inmodificable lista ¿por qué añadir el set(int index, E element) método a continuación ?

Así que mi pregunta es ¿por qué no volver a la java.util.ArrayList de la Arrays.asList(T... a) método ?

También qué ganas con la java.util.Arrays.ArrayList aplicación ?

InformationsquelleAutor Simeon | 2011-01-11

6 Comentarios

  1. 49

    Le preguntó:

    También qué ganas con la
    java.util.Las matrices.ArrayList
    aplicación ?

    Es debido a que las Matrices$ArrayList devueltos por las Matrices.asList es sólo un punto de vista de la matriz original. Así que cuando la matriz original se cambia la vista está cambiado demasiado.

    Si uno utiliza un real ArrayList, a continuación, los elementos se copiarán, y un cambio en el orignal matriz no influir en el ArrayList.

    Las razones para ello son muy simples:

    • rendimiento: no hay necesidad de copiar nada
    • de memoria eficiente: no hay una segunda matriz es necesario
    • Cierto, a excepción de las razones. El docs meantion sólo los datos de escritura para ser un puente entre la matriz y de la colección de bases de Api
    • y los docs meantion no sólo la novia «Este método también proporciona una forma conveniente de crear un tamaño fijo ist inicializado para contener varios elementos». Pero te doy un voto positivo.
    • cual es la media de la razón que lo uso.
    • Me gusta el «punto de vista» explicación.
  2. 13

    El javadoc dice que asList devuelve una lista de tamaño fijo respaldado por la matriz especificada». Si desea cambiar el tamaño de la matriz, usted tiene que crear uno nuevo y copiar los datos antiguos. De la lista de no estar respaldado por la misma instancia de array. El objetivo declarado es «Este método actúa como puente entre basadas en la matriz y basada en la colección de APIs.» y así, mediante la escritura a la base de la matriz es un requisito de diseño.

  3. 6

    Son dos clases diferentes con diferentes comportamientos.

    La lista que se devuelve cuando te llama Matrices.asList es un envoltorio más de la matriz, no una copia. La lista devuelta es de tamaño fijo: el intento de llamar a add producirá una UnsupportedOperationException excepción.

    La java.util.ArrayList por otro lado mantiene su propia copia interna de los datos y es de tamaño variable.

  4. 5

    Matrices.asList debe devolver una lista que no se puedan cambiar, porque el subyacente de la matriz no se puede cambiar de tamaño, pero eso es modificable — porque la asignación a los elementos de la matriz subyacente está permitido.

  5. 3

    realmente son capaces de agregar elementos a la ArrayList con los complementos. método como este :

    List<String> l2= new ArrayList<String>(Arrays.asList(array1));
    l2.add("blueCheese");

    En mi opinión, lo utilizan para obtener las características de una Lista, pero aplicándolos a una Matriz .

    • No usted no es capaz de agregar elementos a la de java.utils.Las matrices.ArrayList regresado a partir de Matrices.asList(T … a). El fragmento de código crea un nuevo java.util.ArrayList, que, como muestran, apoya #agregar.
  6. 1

    Dos comentarios:

    1, el Intento de reducir el array devuelto por la llamada al método remove() de la interfaz de Lista producirá una UnsupportedOperationException. Esto es debido a que el interior de la clase ArrayList en el interior de las Matrices de la clase se extiende AbstractList, y el método remove() en AbstractList lanza UnsupportedException.

    Por lo tanto una vez que la Lista es devuelto, usted puede overstore los elementos existentes en la matriz O en la Lista devuelta, PERO NO está permitido crecer la matriz o reducir la matriz.

    1. En respuesta a:

      realmente son capaces de agregar elementos a la ArrayList con los complementos. método como este :
      Lista l2= new ArrayList(Matrices.asList(matriz1));
      l2.add(«blueCheese»);

    El l2 es una copia independiente de la lista, tan Lista l2 ahora está desacoplado de la matriz original&Lista. Así blueCheese en l2, pero no en la matriz original/Lista en la que se realizó la copia de seguridad de cada uno de los otros.

    -dbednar

Dejar respuesta

Please enter your comment!
Please enter your name here