2010-09-22 42 views

Respuesta

39

Depende de la implementación List. Dado que indexa matrices con int s, un ArrayList no puede contener más de Integer.MAX_VALUE elementos. Un LinkedList no está limitado de la misma manera, sin embargo, y puede contener cualquier cantidad de elementos.

+7

¿Qué tamaño(), get (int), set (int, E) y eliminar (int) do tendría para listas con más de elementos Integer.MAX_VALUE? Debido a esas restricciones, creo que el límite superior de los elementos siempre será Integer.MAX_VALUE porque el tipo de índice lo impone la interfaz java.util.List. –

+12

La [especificación para 'size()'] (http://download.oracle.com/javase/1.5.0/docs/api/java/util/List.html#size%28%29) dice claramente: * Devuelve la cantidad de elementos en esta lista.Si esta lista contiene más elementos que 'Integer.MAX_VALUE', devuelve' Integer.MAX_VALUE'. * Las operaciones de indexación no funcionarán para los elementos después del índice 'Integer.MAX_VALUE', pero a menos que la implementación dependa de la indexación (lo cual' ArrayList' hace por necesidad), aún podría iterar sobre la lista, agregar cosas (ya sea en la cola o antes del índice 'Integer.MAX_VALUE'), eliminar elementos (de nuevo, no después de' Integer.MAX_VALUE'), etc. – gustafc

+0

I Obtuve esta pregunta incorrecta en un examen (dije que era verdad) y de acuerdo con usted, solo es verdad como LinkedList: 'ArrayList no puede redimensionarse dinámicamente si agrega más cantidad de elementos que su capacidad. ¿Estoy en lo correcto entonces y el examen fue incorrecto? (era un examen de ucertify.com) – djangofan

4

Todo lo que su memoria disponible permita. No hay límite de tamaño, excepto para el montón.

18

Depende de la implementación, pero el límite no está definido por la interfaz List.

Sin embargo, la interfaz define el método size(), que devuelve int.

Devuelve el número de elementos en esta lista. Si esta lista contiene más de Integer.MAX_VALUE elementos, devuelve Integer.MAX_VALUE.

Por lo tanto, hay un límite, pero después de llegar a Integer.MAX_VALUE, el comportamiento de la lista cambia un poco

ArrayList (que está etiquetada) está respaldado por una matriz, y está limitado al tamaño de la matriz - es decir, Integer.MAX_VALUE

+0

@Bozho estás seguro, no creo que sea ... si este es el caso, entonces int también puede contener -ve value –

+0

Creo que eso está mal. O bien, ¿por qué 'Collection # size()' decir: _Si esta colección contiene más elementos Integer.MAX_VALUE, devuelve Integer.MAX_VALUE._ Esto depende de la implementación específica. – musiKk

+0

@musiKk, @ org.life.java - tienes razón, lo arregló. – Bozho

9

java.util.List es una interfaz. La cantidad de datos que puede contener una lista depende de la implementación específica de la Lista que elija usar.

En general, una implementación de lista puede contener cualquier cantidad de elementos (si utiliza una lista indexada, puede estar limitada a Integer.MAX_VALUE o Long.MAX_VALUE). Mientras no se quede sin memoria, la Lista no se "llenará" ni nada.

+0

De acuerdo con los documentos, los elementos deben caber en una matriz (Consulte el método Array). – aioobe

10

¿Cuántos datos se pueden agregar en java.util.List en Java al máximo?

Esto es muy similar a Theoretical limit for number of keys (objects) that can be stored in a HashMap?

La documentación de java.util.List no documentado de forma explícita ningún límite en el número máximo de elementos. La documentación de List.toArray sin embargo, afirma que ...

devolver una matriz que contiene todos los de los elementos de esta lista en la secuencia apropiada (del primero al último elemento); tendrían problemas para la aplicación de ciertos métodos fielmente, como

... así que estrictamente hablando no sería posible llevar a cabo fielmente este método si la lista tenía más de 2 -1 = 2147483647 elementos que desde es la matriz más grande posible.

Algunos argumentarán que la documentación de size() ...

Devuelve el número de elementos en esta lista. Si esta lista contiene más de Integer.MAX_VALUE elementos, devuelve Integer.MAX_VALUE.

... indica que no hay un límite superior, pero esta vista da lugar a numerosas incoherencias. Ver this bug report.

¿Hay algún tamaño predeterminado en la lista de arreglos?

Si se refiere a ArrayList entonces yo diría que el tamaño predeterminado es 0. La capacidad predeterminada sin embargo (el número de elementos que se pueden insertar, sin forzar la lista de reasignar la memoria) es 10. Consulte la documentación del default constructor.

El límite de tamaño de ArrayList es Integer.MAX_VALUE ya que está respaldado por una matriz ordinaria.

0

vea el siguiente código de arraylist default es 10 cuando crea Lista l = new ArrayList();

public class ArrayList<E> extends AbstractList<E> implements List<E>, 
      Cloneable, Serializable, RandomAccess { 

      private static final long serialVersionUID = 8683452581122892189L; 

      private transient int firstIndex; 

      private transient int lastIndex; 

      private transient E[] array; 

      /** 
      * Constructs a new instance of {@code ArrayList} with ten capacity. 
      */ 
      public ArrayList() { 
       this(10); 
      } 
+0

Y si intenta agregar el undécimo elemento, ¿qué ocurre? (Sugerencia: tiene éxito.) Su respuesta es "correcta", ya que cortó y pegó esto fuera de la fuente, pero implica un máximo de diez elementos, lo que no es correcto. – duffymo

+0

@duffymo estaba tratando de decir cuando crea una ArrayList como esta Lista l = new ArrayList(); el tamaño predeterminado sería diez. –

+3

Lo sé, pero eso no es lo que pregunta. Tenía que ver con el tamaño máximo permitido de una matriz, no con el tamaño inicial. ¿Ver la diferencia? – duffymo

1

Sin embargo, la interfaz define el método size(), que devuelve un int.

Returns the number of elements in this list. If this list contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE. 

Por lo tanto, hay un límite, pero después de llegar a Integer.MAX_VALUE, el comportamiento de la lista cambia un poco ArrayList

(que está etiquetada) está respaldado por una matriz, y está limitado al tamaño de la matriz, es decir, Integer.MAX_VALUE

0

La numeración de un elemento en la matriz Java debe comenzar desde cero. Esto fue, creo, que podemos tener acceso a Integer.MAX_VALUE + 1 elementos.

+1

este es su pensamiento, pero no es una discusión. la respuesta debe basarse en una visión clara y una prueba. – manetsus

Cuestiones relacionadas