Simpele uitleg van ArrayLists

Ik ben nieuw in programmeren en ik ben op zoek naar een eenvoudig antwoord om mijn basis van begrip Arrays te bouwen. Ik heb Google gebruikt en deze site doorzocht.

Na een beetje vallen en opstaan, snap ik hoe je Arrays als ding [3] kunt maken en het vierde ding in de array van objecten krijgt (want 0 is de eerste). waarmee ik iets als ding [3] .getStupidNumber() kan doen om het StupidNumber van het 4e ding in de array van het ding te krijgen.

Dan kom ik bij ArrayLists die veel nuttiger lijken te zijn, maar ik kan er geen logische betekenis van krijgen, zoals Arrays. Als ik zoek, kan ik dit niet vinden of dit correct noemen en tot nu toe heeft al het andere dat ik heb geleerd gemakkelijk geklikt.

dus ik maak een ArrayList-ding met 5 dingen erin. hoe kom ik bij de .getStupidNumber() methode binnen het vierde ding, indien mogelijk? Ik denk dat als ik dit leer, ik de rest alleen kan leren.

2
Ik begrijp geen downvote.
toegevoegd de auteur Alexander Pogrebnyak, de bron
@jli Alleen als het meer ruimte nodig heeft, maar hoe het groeit, is het afhankelijk van de implementatie en niet-gespecificeerd.
toegevoegd de auteur Dave Newton, de bron
@jli Nee, als u de capaciteit niet overschrijdt, maar nogmaals, capaciteit en groei worden niet gedefinieerd als onderdeel van de API.
toegevoegd de auteur Dave Newton, de bron
@jli Nee, dat doe je niet, maar het helpt om een ​​bovengrens te hebben. U zei dat het een nieuwe array, enz., Zal toewijzen wanneer u een nieuw item toevoegt, wat in het algemeen niet waar is - het gebeurt wanneer u de capaciteit overschrijdt (hoewel nogmaals, afhankelijk van de implementatie). Zeggen dat het "als je een item toevoegt" misleidt, omdat het zelden waar is. It may , maar in het algemeen niet. En je kunt verzekeren dat de capaciteit is ingeschakeld om reallocussen te vermijden als je weet dat je er toch veel in gaat dumpen.
toegevoegd de auteur Dave Newton, de bron
@jli Nou, je originele verklaring leest heel anders dan dat, maar misschien heb ik het op een of andere manier verkeerd geïnterpreteerd.
toegevoegd de auteur Dave Newton, de bron
toegevoegd de auteur Brian Roach, de bron
@AlexanderPogrebnyak - beweeg over de neerwaartse pijl; onderzoeksinspanning . Er zijn slechts ongeveer 475.000 pagina's die verschijnen op het gebruik van arraylist als je het googelt.
toegevoegd de auteur Brian Roach, de bron
Merk op dat in Java het ArrayList -type feitelijk een nieuwe array toewijst en vervolgens de oude inhoud kopieert wanneer u een nieuw item invoegt, waardoor het niet noodzakelijkerwijs het beste is om te gebruiken.
toegevoegd de auteur jli, de bron
@DaveNewton als u de aanvankelijke capaciteit kent, is dat niet het geval, maar als u dat weet, kunt u alleen een array gebruiken.
toegevoegd de auteur jli, de bron
@DaveNewton zijn standaardcapaciteit is 10, tenzij u een andere constructor belt om de initiële capaciteit in te stellen. Zo effectief moet je de aanvankelijke capaciteit kennen.
toegevoegd de auteur jli, de bron
@DaveNewton wat ik wil zeggen is dat als je weet hoeveel je ervoor moet zorgen, je gewoon een array van die grootte kunt maken ..
toegevoegd de auteur jli, de bron

3 antwoord

Laten we zeggen dat je een klasse hebt genaamd StupidThing

class StupidThing {
    int getStupidNumber(){return 1;}
}

List list = new ArrayList(); 
// This list represents a list of Object. It can hold only object. 
StupidThing stupidThing = new StupidThing();

en je wilt een scala aan StupidThings hebben. We kunnen stupidThing aan de array toevoegen.

list.add(stupidThing); 

Houd er rekening mee dat de lijst een reeks objecten vertegenwoordigt. Daarom zal list.get (0) de eerste stupidThing als een object retourneren. Om de StupidThing-methode aan te roepen, moet je het geretourneerde object naar StupidThing downgraden;

int stupidNumber = ( (StupidThing) (list.get(0)) ).getStupidNumber(); 

Als je niet van "downcast" houdt, kun je in plaats daarvan een lijst met StupidThing gebruiken.

List list = new ArrayList(); 
// Now list can only hold instances of StupidThing  
StupidThing stupidThing = new StupidThing();
list.add(stupidThing); 
int stupidNumber = list.get(0).getStupidNumber();
3
toegevoegd
Dank je! (Nog 5 te gaan ...)
toegevoegd de auteur Jeremy, de bron

ArrayList ( and List in general ) has a positional get method, which acts essentially the same as [] array operator.

ArrayList list = ...;

list.get(3).getStupidNumber( );
0
toegevoegd
Dit is vrijwel precies wat ik wilde, hartelijk dank!
toegevoegd de auteur Jeremy, de bron

You need to learn about genericity. see Generics in Java

0
toegevoegd
Bedankt, een beetje. Maar je moet een beetje leren hoe je vragen goed kunt beantwoorden. Ik vroeg om een ​​eenvoudig antwoord op iets dat ik in de vraag heb gespecificeerd en je geeft me een link. Misschien probeerde je niet onbeleefd te zijn en ik probeer het ook niet te zijn.
toegevoegd de auteur Jeremy, de bron
Als ik je een antwoord geef, weet je alleen hoe je het moet doen met een klein stukje code. En de volgende keer, als het probleem iets anders is, zal je het opnieuw vragen. Dus ik denk dat het een van de mogelijke antwoorden is om je de technische term te geven over wat je moet doen/weten. Ik probeerde je gewoon te helpen, want ik weet dat het moeilijk is iets te zoeken als je niet weet hoe het heet.
toegevoegd de auteur florian, de bron