[Java] Item verwijderen uit een ArrayList

Pagina: 1
Acties:
  • 453 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • -GSF-JohnDoe
  • Registratie: Juli 2002
  • Laatst online: 25-07 14:39

-GSF-JohnDoe

[insert tile here]

Topicstarter
(ik heb in de meeste waardes verandert in hun types voor de duidelijkheid)

Ik vul een ArrayList (coll) met het (zelfgemaakte) object Keeper

code:
1
2
Keeper k = new Keeper(<INT>, <COLOR>, <INT>, <INT>, <STRING>);
coll.add(k);


dit geeft geen errors. Ook coll.size() werkt correct.

Als ik nu een item uit deze ArrayList wil verwijderen (volgens de Java help gewoon coll.remove(int Index) ), en ik doe coll.remove(0) geeft de compiler (ik gebuik JCreator) het bericht:
code:
1
2
3
remove(java.lang.Object) in java.util.Collection cannot be applied to (int)
coll.remove(1)
    ^


Ook krijg ik een error als ik de opdracht removeRange(<INT fromIndex>, <INT toIndex>) gebruik. Dit bericht is:
code:
1
2
3
4
5
Cannot resolve symbol
symbol  : method removeRange (int,int)
location: interface java.util.Collection
coll.removeRange( 0, 2);
    ^

In de java documentatie staat deze methode gewoon vermeld.

ik importeer java.awt.* en java.util.*

EDIT:

Ik maak de ArrayList d.m.v:
code:
1
2
3
static Collection coll;
...
coll = new ArrayList();


Welke fout maak ik?

[ Voor 15% gewijzigd door -GSF-JohnDoe op 14-11-2003 02:46 ]


Acties:
  • 0 Henk 'm!

  • silentsnow
  • Registratie: Maart 2001
  • Laatst online: 15-04-2013

silentsnow

« '-_-' »

Probeer het eens met java.util.ArrayList ipv java.util.Collection.

The trade of the tools
[ me | specs ] Klipsch Promedia Ultra 5.1 + Sennheiser HD-590


Acties:
  • 0 Henk 'm!

  • -GSF-JohnDoe
  • Registratie: Juli 2002
  • Laatst online: 25-07 14:39

-GSF-JohnDoe

[insert tile here]

Topicstarter
als ik dat doe

code:
1
static java.util.ArrayList coll;
(static omdat ik de ArrayList vanuit andere classes moet kunnen aanspreken)

Dan krijg ik een nullpointerexception in de regel:
code:
1
SchetsCanv.coll.add(k);


Ik ga er vanuit dat dit echt niet zo moeilijk is maar ik ben nogal nieuw met Java.

Acties:
  • 0 Henk 'm!

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 07-11-2024
Java:
1
public static ArrayList coll = new ArrayList();

Dat zou gewoon moeten werken.

Als je alleen maar zegt dat coll een ArrayList is dan is het nog geen object en krijg je dus een NullPointerException.

Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Nu online

Eelke Spaak

- Vlad -

Zoals de compiler al zegt, verwacht remove() een Object als argument. Dat betekent dat primitieve types worden geweigerd. Probeer iets als:

Java:
1
2
Object o = coll.get(1);
coll.remove(o);

TheStreme - Share anything with anyone


Acties:
  • 0 Henk 'm!

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 15-06 22:56
Hoe kom je er bij dat removeRange(int, int) staat in de API van java.util.Collection? Die zie ik echt nergens terug. Het zou ook vrij vreemd zijn als die erbij zou staan. Het hele punt van een Collection is, volgens mij, dat je Objecten op kan slaan en dat de volgorde niet vast staat.
Als je wel wilt dat de volgorde vast staat kan je gebruik maken van java.util.List.

Dan krijg je zoiets als:

Java:
1
2
3
4
List list = new ArrayList();
Object obj = new Object();
list.add(obj);
list.remove(0); // al zou ik dan nog gewoon list.remove(obj) gebruiken in dit geval.

Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 25-07 20:24

Robtimus

me Robtimus no like you

Als je niet aan je declaratie van coll wilt komen, dus dat een Collection wilt laten zijn, kun je hem casten:
code:
1
((ArrayList)col).remove(0);
Je moet er dan wel zeker van zijn dat het een List is.

removeRange mag je niet gebruiken, want dat is een PROTECTED method.

@Vladimir: Collection kent geen get(int) method.

De TS moet of casten naar de class waarmee de collectie wordt geinitialiseerd, of een List declareren ipv een Collection.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 25-07 20:24

Robtimus

me Robtimus no like you

Dash2in1 schreef op 14 november 2003 @ 11:58:
Dan krijg je zoiets als:

Java:
1
2
3
4
List list = new ArrayList();
Object obj = new Object();
list.add(obj);
list.remove(0); // al zou ik dan nog gewoon list.remove(obj) gebruiken in dit geval.
De voordelen van een remove(int) is, dat je nog geen referentie hoeft te hebben naar het object dat je wilt verwijderen, en dat ie een referentie naar dat object teruggeeft. Ideaal als je dus bv het eerste element wilt verwijderen zonder dat je weet welke dat is.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Nu online

Eelke Spaak

- Vlad -

IceManX schreef op 14 november 2003 @ 12:11:
Als je niet aan je declaratie van coll wilt komen, dus dat een Collection wilt laten zijn, kun je hem casten:
code:
1
((ArrayList)col).remove(0);
Je moet er dan wel zeker van zijn dat het een List is.

removeRange mag je niet gebruiken, want dat is een PROTECTED method.

@Vladimir: Collection kent geen get(int) method.

De TS moet of casten naar de class waarmee de collectie wordt geinitialiseerd, of een List declareren ipv een Collection.
Idd, je hebt gelijk. Ik ging er eigenlijk blind vanuit dat de gebruikte List ook als zodanig gedeclareerd zou zijn... :D

TheStreme - Share anything with anyone

Pagina: 1