Archief - ArrayList probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

LilWeezy

Legacy Member
Dag iedereen,

Ik zit vast bij de methode verwijderItem in een arrayList.

Code:
public void verwijderItem(int index)throws IndexOutOfBoundsException
{
    if(index < 0 || index > mijnPersonenLijst.size())
    {
        throw new IndexOutOfBoundsException("Er is een verkeerde index lengte meegegeven! Voor een correct lengte in!");
        		
    }else {
        for(int i = 0; i<mijnPersonenLijst.size();i++)
        {
            if(mijnPersonenLijst.get(i) != null )
            {
                mijnPersonenLijst.remove(index);    		}
        }
    }
}

--> Probleem is dat deze methode niet correct werkt. Kan iemand deze code optimaliseren?

Alvast bedankt!

Kemblin

Legacy Member
vrij nutteloze methode als je het mij vraagt ma soit :P

Code:
public void verwijderItem(int index) throws IndexOutOfBoundsException {
		try {
			mijnPersonenLijst.remove(index);
		} catch (IndexOutOfBoundsException e) {
			throw new IndexOutOfBoundsException(
					"Er is een verkeerde index lengte meegegeven! Voor een correct lengte in!");
		}
	}

Moto

Legacy Member
--> Probleem is dat deze methode niet correct werkt.
Het probleem is 2-delig
1) Deze methode HEEFT GEEN ENKEL NUT, GEEN NUT = BROL
2) Stop met die nederlandse code

LilWeezy

Legacy Member
Dank u voor de reacties!

Nu werkt het wel. En sorry voor de misschien "onnuttige code" we moeten dit doen voor school om het arrayList gebeuren onder de knie te krijgen..

Nog kleine vraagjes: bij je catch staat : IndexOutOfBoundsException e
Waarvoor dient die "e"

Thanks!

Kemblin

Legacy Member
die "e" is de referentie naar de exceptie die gegooid wordt, op die manier kunt ge dingen als

Code:
System.out.println(e.getMessage());
e.printStackTrace();
binnen de catch doen. Maar tbh u methode is echt nutteloos, ge kunt evengoed rechtstreeks de methode "remove" oproepen ipv deze nog eens in een andere methode te omwikkelen.

MAXXUR

Legacy Member
Ziet ge in hoe uw eerder geschreven for-lus op nix slaat? Da lijkt mij belangrijker dan nu tevreden te zijn met "het werkt" - leer uit uw fouten!

LilWeezy

Legacy Member
Okéé thanks, Ik heb volgende week hier een test van.

We moeten 4 dingen kunnen toevoegen, verwijderen, opzoeken, vervangen en dit bij ArrayList en LinkedList.

Soms nog wat tips ? Maar normaal gezien als je de verschillende methoden kunt schrijven moet dit wel gaan zeker :).

Toch al bedankt voor de hulp !

Jerre Muesli

Legacy Member
Nen tip bij lists; verwijder geen items terwijl ge erover loopt met bvb een shorthand for loop want dan krijgde exceptions. Gebruik hiervoor Iterators

LilWeezy

Legacy Member
oke !
Tot nu toe ben ik met alle methodes mee maar ik blijf wat vast zitten bij de contains methode. Zou iemand eventueel kort kunnen uitleggen hoe je dit simpel doet?

Op de java API staat dat het moet met: public boolean contains(Object elem)

Ik heb dit tot nu toe al gemaakt maar ik heb de ingebouwde contains niet gebruik dus is dit zoiso fout. :
Code:
 public boolean contains (Persoon element) throws IllegalArgumentException
{
    boolean found = false;
        	
    if( element == null)
    {
        throw new IllegalArgumentException();	
    }
        	
    for(int i =0; i<mijnPersonenLijst.size();i++)
    {
        if(mijnPersonenLijst.get(i).equals(element))
        {
            found = true;
        }
    }
    return found;
}
Het kan zijn dat er domme fouten in staan maar ik ben dan ook een eerste jaars student ;).

Vensys

Legacy Member
Moet je zelf het werken van een arraylist nabouwen of mag je de java implementatie gebruiken? Deze bevat al de methodes die je zoekt en zouden je veel tijd besparen.

Code:
Person ikke = new Person("ikke");
List<Person> personsList = new ArrayList<Person>();

personsList.add(ikke);

personsList.contains(ikke); // true

personsList.remove(ikke);

personsList.contains(ikke); // false

LilWeezy

Legacy Member
We mogen de java implementatie gebruiken maar moesten eerst elke implementatie nabouwen.

Maar ik snap eigenlijk niet goed hoe die contains checkt of het "element" overeenkomt of niet?

Vensys

Legacy Member
De contains methode van een ArrayList gaat alle elementen checken via de "boolean equals(Object o)" methode. Dat is een methode die elk object heeft en standaard het adres in het geheugen zal vergelijken om te kijken of 2 objecten gelijk zijn. Het is echter veelal aangewezen deze te overriden, maar ik denk niet dat dat tot de oefening hoort.

De java Arraylist werkt achterliggend met een gewone array met een default grootte, je kan met de constructor wel een andere startgrootte meegeven als je al ongeveer weet hoe groot je list zal worden.

Code:
Person[] persons = new Person[10]; // Default size 

public boolean contains(Person inP){
     for(Person p : persons){
          if(p.equals(inP)){
               return true;
          }           
     }
     return false;
}

LilWeezy

Legacy Member
Ok ik snap het al wat beter maar hoe moet ik het dan aanpakken als ik met de java implementatie "Contains" wil werken? Dus niet het nabootsen. Sorry maar da blijft me wat onduidelijk :p

Vensys

Legacy Member
Met de java ArrayList doe je het zo:

Code:
Person ikke = new Person("ikke");
Person gij = new Person("gij");
List<Person> personsList = new ArrayList<Person>();

personsList.add(ikke); // Voeg ikke toe

System.out.println("Zit ik in de lijst?");
System.out.println(personsList.contains(ikke)); // Test of ik in de lijst zit

System.out.println("Zit gij in de lijst?");
System.out.println(personsList.contains(gij)); // Test of gij in de lijst zit

De output zou er dan zo moeten uitzien:

Code:
Zit ik in de lijst?
true
Zit gij in de lijst?
false

NeverwinterX

Legacy Member
Is het niet de bedoeling dat je een array gebruikt ipv een arraylist en daar dan die contains en index voor schrijft? Klink veel logischer vanuit educatief perspectief.

Karre

Legacy Member
NeverwinterX zei:
Is het niet de bedoeling dat je een array gebruikt ipv een arraylist en daar dan die contains en index voor schrijft? Klink veel logischer vanuit educatief perspectief.

Was ik ook aan het denken. Al dacht ik dan wel eerder met behulp van objecten in plaats van een Array. Een klasse die dan een klasse node bevat en die node bevat dan terug een node zodat ze zo aan elkaar gelinkt zijn.

blackrabbit

Legacy Member
Alleen heb je dan geen ArrayList meer, maar een gewone LinkedList. Zeker ook interessante oefening, maar het resultaat heeft wel heel andere performantie-karakteristieken...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan