Câte date poate conține o listă la maxim? (Programare, Java, Arraylist, Dimensiune)

Paul a intrebat.

Câte date pot fi adăugate în java.util.List în Java la maxim?

Există o dimensiune implicită a unei ArrayList?

8 răspunsuri
gustafc

Depinde de List implementare. Din moment ce indexați array-urile cu ints, un ArrayList nu poate conține mai mult de Integer.MAX_VALUE elemente. A LinkedList nu este limitat în același mod și poate conține orice cantitate de elemente.

Comentarii

  • Ce ar trebui să facă size(), get(int), set(int, E) și remove(int) pentru listele cu mai multe elemente decât Integer.MAX_VALUE? Din cauza acestor constrângeri, cred că limita superioară a elementelor va fi întotdeauna Integer.MAX_VALUE, deoarece tipul de index este impus de interfața java.util.List. –  > Por Kim Burgaard.
  • specificația pentru size() spune în mod clar: Returnează numărul de elemente din această listă. Dacă această listă conține mai mult de Integer.MAX_VALUE elemente, se returnează Integer.MAX_VALUE. Operațiunile de indexare nu vor funcționa pentru elementele după indexul Integer.MAX_VALUE, , dar, dacă implementarea nu se bazează pe indexare (care ArrayList o face din necesitate), puteți totuși să iterați lista, să adăugați elemente la ea (fie la coadă, fie înainte de indexul Integer.MAX_VALUE), să eliminați elemente (din nou, nu după Integer.MAX_VALUE), etc. –  > Por gustafc.
  • Am răspuns greșit la această întrebare la un examen ( am spus că este adevărată) și conform dumneavoastră , este adevărată doar ca LinkedList: ArrayList cannot resize dynamically if you add more number of elements than its capacity. . Am dreptate atunci și examenul a fost greșit? (a fost un examen de pe ucertify.com).  > Por djangofan.
  • @djangofan Nu sunt sigur care este întrebarea ta, sau cum a fost formulată întrebarea pe care ai greșit-o, dar iată care este problema: La List interfața nu specifică o dimensiune maximă, dar toate implementările vor fi limitate într-un fel. ArrayList, , de exemplu, este limitată de dimensiunea maximă a array-urilor, în timp ce Collections.EMPTY_LIST are o capacitate maximă de zero elemente pentru că așa este specificat în specificația sa etc. (Și toate implementările sunt, desigur, limitate de memoria disponibilă, cu excepția cazului în care dispun de un fel de stocare de dimensiune infinită în afara memoriei RAM). –  > Por gustafc.
Bozho

Ar depinde de implementare, dar limita nu este definită de către List interfață.

Interfața definește însă size() care returnează un int.

Returnează numărul de elemente din această listă. În cazul în care această listă conține mai mult de Integer.MAX_VALUE elemente, se returnează Integer.MAX_VALUE.

Așadar, nu există o limită, dar după ce se ajunge la Integer.MAX_VALUE, , comportamentul listei se schimbă un pic

ArrayList (care este etichetată) este susținută de un tablou și este limitată la dimensiunea tabloului – adică. Integer.MAX_VALUE

Comentarii

  • @Bozho ești sigur, nu cred că este… dacă este așa atunci int poate deține și valoarea -ve -.  > Por jmj.
  • Cred că este greșit. Altfel, de ce ar fi Collection#size() spune: Dacă această colecție conține mai multe elemente decât Integer.MAX_VALUE, returnează Integer.MAX_VALUE. Acest lucru depinde de implementarea specifică. –  > Por musiKk.
  • Conform documentației, elementele trebuie să încapă într-un array (a se vedea metoda toArray). –  > Por aioobe.
  • @aioobe – metoda va arunca o excepție, deoarece elementul size câmpul va fi negativ (din cauza depășirii int overflow), dar lista în sine va funcționa. –  > Por Bozho.
  • Ei bine, depinde de modul în care definești „o listă care funcționează”. O implementare care nu face altceva decât să arunce o excepție în fiecare metodă List este o listă care funcționează? –  > Por aioobe.
aioobe

Câte date pot fi adăugate în java.util.List în Java la maxim?

Acest lucru este foarte asemănător cu Limita teoretică pentru numărul de chei (obiecte) care pot fi stocate într-un HashMap?

Documentația de java.util.List nu documentează în mod explicit nicio limită privind numărul maxim de elemente. Documentația lui List.toArray precizează totuși că …

Returnează o matrice care conține toate elementele din această listă în ordinea corectă (de la primul la ultimul element); ar avea probleme în implementarea fidelă a anumitor metode, cum ar fi

… deci, strict vorbind, nu ar fi posibilă implementarea fidelă a acestei metode dacă lista ar avea mai mult de 231-1 = 2147483647 elemente, deoarece aceasta este cea mai mare matrice posibilă.

Unii vor susține că documentația metodei size()

Returnează numărul de elemente din această listă. Dacă această listă conține mai mult de Integer.MAX_VALUE elemente, se returnează Integer.MAX_VALUE.

…indică faptul că nu există o limită superioară, dar această viziune duce la numeroase neconcordanțe. A se vedea acest raport de eroare.

Există o dimensiune implicită a unei liste de matrice?

Dacă vă referiți la ArrayList atunci aș spune că dimensiunea implicită este 0. Dimensiunea implicită este capacitate totuși (numărul de elemente pe care le puteți introduce, fără a forța lista să realoce memoria) este 10. Consultați documentația pentru constructor implicit.

Limita de dimensiune a ArrayList este Integer.MAX_VALUE deoarece este susținută de o matrice obișnuită.

Gerco Dries

java.util.List este o interfață. Cantitatea de date pe care o poate conține o listă depinde de implementarea specifică a Listei pe care alegeți să o utilizați.

În general, o implementare List poate conține orice număr de elemente (Dacă utilizați o listă indexată, aceasta poate fi limitată la Integer.MAX_VALUE sau Long.MAX_VALUE). Atâta timp cât nu rămâneți fără memorie, Lista nu devine „plină” sau ceva de genul acesta.

Comentarii

  • Conform documentației, elementele trebuie să se încadreze într-un array (a se vedea metoda toArray). –  > Por aioobe.
duffymo

Atât cât vă permite memoria disponibilă. Nu există o limită de dimensiune, cu excepția heap-ului.

Mohammad

Interfața definește totuși metoda size(), care returnează un int.

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

Așadar, nu există o limită, dar după ce ajungeți la Integer.MAX_VALUE, comportamentul listei se schimbă un pic

ArrayList (care este etichetată) este susținută de un array și este limitată la dimensiunea array-ului – adică Integer.MAX_VALUE

Programator mort

vedeți codul de mai jos al arraylist implicit este 10 când u creați List 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);
          }

Comentarii

  • Și dacă încercați să adăugați al unsprezecelea element, ce se întâmplă? (Indiciu: reușește.) Răspunsul tău este „corect”, deoarece ai tăiat & lipit acest lucru din sursă, dar implică un maxim de zece elemente, ceea ce nu este corect. –  > Por duffymo.
  • @duffymo încercam să spun că atunci când u creați un ArrayList ca acesta List l = new ArrayList(); dimensiunea implicită ar fi zece. –  > Por Programator mort.
  • Știu, dar nu despre asta era vorba în întrebare. Avea legătură cu dimensiunea maximă admisă a unui array, nu cu dimensiunea inițială. Vedeți care este diferența? –  > Por duffymo.
Oleksy Ostanin

Numerotarea unui element în matricea java ar trebui să înceapă de la zero. Astfel, cred că putem avea acces la Integer.MAX_VALUE+1 un element.

Comentarii

  • acesta este gândul tău, dar nu este o discuție. răspunsul ar trebui să fie pe baza unei viziuni clare și a unei dovezi. –  > Por Enamul Hassan.