Springen naar inhoud

Datastructuur in java



  • Log in om te kunnen reageren

#1

upsilon

    upsilon


  • >25 berichten
  • 93 berichten
  • Ervaren gebruiker

Geplaatst op 05 april 2013 - 15:20

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

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 05 april 2013 - 15:54

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

#3

upsilon

    upsilon


  • >25 berichten
  • 93 berichten
  • Ervaren gebruiker

Geplaatst op 08 april 2013 - 15:54

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?

Veranderd door upsilon, 08 april 2013 - 16:02

BABBAGE

#4

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 08 april 2013 - 16:35

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:
public class Collision implements Comparable<Collision>{

Daarna implementeer je in die klasse de compareTo() methode:
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.

#5

upsilon

    upsilon


  • >25 berichten
  • 93 berichten
  • Ervaren gebruiker

Geplaatst op 09 april 2013 - 09:58

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

#6

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 09 april 2013 - 10:21

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:

if( 1 < 2 )
  return -1;
else
  if( 1 > 2 )
    return 1;
  else
    return 0;

#7

upsilon

    upsilon


  • >25 berichten
  • 93 berichten
  • Ervaren gebruiker

Geplaatst op 15 april 2013 - 18:41

Bedankt voor het antwoord !
BABBAGE






Also tagged with one or more of these keywords: informatica

0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures