[informatica] Datastructuur in java

Moderators: ArcherBarry, Fuzzwood

Reageer
Berichten: 93

Datastructuur in java

Beste,

Ik heb een reeks objecten van een bepaalde klasse en wil dat deze automatisch gerangschikt worden volgens een bepaalde eigenschap van die klasse. Welke datastructuur (List, Set, ...) gebruik je dan het best?

Bijvoorbeeld:

er is een hele reeks van de klasse 'Collision'.

collisionBetweenShip1AndShip2 ,collisionBetweenShip1AndBullet1,...

in welke datastructuur moeten deze referenties naar objecten zodat ze automatisch gerangschikt worden volgens de eigenschap getTimeToCollision() van een Collision.

Dank bij voorbaat,

Upsilon.
BABBAGE

Gebruikersavatar
Berichten: 2.609

Re: Datastructuur in java

De datastructuur maakt op zich niet veel uit, maar je moet meegeven hoe 2 instances van je klasse vergeleken kunnen worden.

Hier worden 2 manieren beschreven

Berichten: 93

Re: Datastructuur in java

Ik geraakte niet echt uit aan het voorbeeld dat je daar gaf. Zelf vond ik:

http://orangepalanti...ex.php?idnum=63

Dit is ongeveer wat ik wil doen. Het enige probleem is dat als twee Collisions toevallig dezelfde getTimeToCollision() hebben dan wordt er één verwijderd. Dat mag niet. (Naar analogie met het voorbeeld 'otherTwo' wordt verwijderd omdat het dezelfde compare waarde heeft als 'two')

Hoe kan dit euvel verholpen worden?

edit: nog even vermelden getTimeToCollision() is van het type double, is dit een probleem?
BABBAGE

Gebruikersavatar
Berichten: 2.609

Re: Datastructuur in java

Ik denk dat objecten met een gelijke CollisionTime niet verwijderd zullen worden als je een List gebruikt. Misschien dat jij met een Set werkte?

Laten we voor de methode kiezen waarbij je jouw objecten 'vergelijkbaar' maakt.

In de definitie van je klasse moet je dan zeggen dat ze de Comparable interface implementeert.

Voor jouw dan iets in de aard van:

Code: Selecteer alles


public class Collision implements Comparable<Collision>{

Daarna implementeer je in die klasse de compareTo() methode:

Code: Selecteer alles


public int compareTo(Collision o) {

   return this.getTimeToCollision() - o.getTimeToCollision() ;

}

Als je nu een List van Collisions maakt, dan zou je hem moeten kunnen sorteren.

Berichten: 93

Re: Datastructuur in java

awel ja, maar dat voorstel werkt niet omdat getTimeToCollision() een double is ? (Althans als ik dat probeer ... )
BABBAGE

Gebruikersavatar
Berichten: 2.609

Re: Datastructuur in java

Ah dat zou kunnen, ik vermoed dat je in Java altijd moet typecasten? Je wil een int returnen vanuit een double, dus moet je er (int) voorzetten. Schrijf het misschien voor de veiligheid uit in onderstaande vorm:

Code: Selecteer alles


if( 1 < 2 )

  return -1;

else

  if( 1 > 2 )

    return 1;

  else

    return 0;


Berichten: 93

Re: Datastructuur in java

Bedankt voor het antwoord !
BABBAGE

Reageer