

Java - ArrayList - Lze nastavit maximální počet prvků?
Dobrý den,
Vím, že má ArrayList (oproti klasickému poli) dynamickou velikost, ale přesto se chci zeptat.
Je, prosím Vás, možné, u ArrayListu, nastavit maximální počet prvků?
Děkuji
Pokud vím ne. Ale není problém si vytvořit třídu, která to bude řešit za tebe.
OK. A co znamená první odpověď u otázky?
List je interfejs, ktorý môže byť implementovaný ďalšími triedami. ArrayList je jednou z implementácií, ktorá umožňuje pridávať a odoberať prvky.
Arrays.asList vracia implementáciu interfejsu, za ktorou stojí pole. Operácie pracujúce nad takto vytvoreným Listom menia priamo prvky toho poľa a niektoré operácie sú zakázané úplne (ako napr. pridanie a odobranie prvku).
Ak ti stačí List s pevným počtom prvkov, tak pomocou Arrays.asList vieš vytvoriť List s nastaveným maximálnym počtom prvkov. Možno nevýhodou bude, že to v takom prípade bude aj minimálny počet prvkov.
Ak chceš obmedziť maximálny počet prvkov v ArrayListe, tak si sprav wrapper triedu, ktorá pri pridávaní prvku skontroluje, či nebola prekročená maximálna hodnota. Možno by pomohol kontext, že na čo to vlastne potrebuješ, lebo väčšinou takáto biznis logika býva v servisnej triede, ktorá interne používa list a ak ho vystavuje von, tak iba v nemennej forme.
Řekněme, že žádný hlubší účel to nemá. Jen chci vědět, jestli je to možné.
Nechápem k čomu to má byť dobré...Ty to nemáš pod kontrolou?
* size() Ti vráti počet prvkov, na základe toho počtu sa rozhodneš čo ďalej...
Určitě je to možné. Stačí ti k tomu znát magickou syntaxi.
Tento kus kódu je fool-proof. Dokonce to má i kontrolu na to, že nemůžeš získat prvek s indexem větším (nebo menším) než je velikost pole - 1, jinak skončíš u IndexOutOfBoundsException
ještě jako bonus k tomu dostaneš škálovatelnost. Člověk by nevěřil co všechno se dá s pouhým polem dokázat. Doslova všechno. K tvému štěstí je Java OOP a vytvoření třídy s privátní vlastností, která bude reprezentovat třeba (tohle je úplně OT - nemá to žádnou souvislost s tim na co se ptáš) index posledního prvku v poli o pevné velikosti, není vůbec složité. O nějakých metodách se snad ani nemá cenu zmiňovat 
Len pre zaujímavosť, čo máš na mysli pod škálovateľnosťou v tomto prípade?
Špatně jsem to použil. Myslel jsem tím, že za pomocí polí se dají vytvářet složitější třídy, např. zde zmiňované ArrayListy.
Přesně tohle jsem zmínil v zadání. Ty mluvíš o klasickém poli. A tam je pochopitelné, že je statická velikost.
Snažil jsem se tě donutit se zamyslet. Dokonce jsem ti tam i přidal návod na implementaci řešení. Kolekce s pevně danou maximální velikostí je v podstatě definice pole.
LinkedList je tzv. "spojitý seznam" a každý prvek udržuje referenci na ten další, příp. i na ten předchozí. Pokud použiješ přetížení konstruktoru array listu, kam předáš nějaké pole, tak tim nevytvořiš list o maximální velikosti toho pole.
V Javě se používá ArrayList a LinkedList. Jak již název napovídá, tak ArrayList je implementován pomocí klasického pole
No, uzavřel bych to s tím, že mě jenom zajímalo, jestli je to možné, ale lze to nastavit pouze u klasického pole.
V podstatě, u pole je to nutnost. U ArrayListu je pouze možné zadat, s jakým počtem prvků se inicializuje. (normálně je to 0)
I když, přesto bych se chtěl zeptat. Jaký je rozdíl mezi
a
Pokud následně přidáš 100 objektů, tak je výsledek stejný.
K čemu je teda inicializace dobrá?
Díky
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
Jedná se o prvotní velikost pole, ve kterém se elementy ukládají.
OK. Díky