[JAVA] Objecten vergelijken

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

  • Dieter
  • Registratie: Januari 2001
  • Laatst online: 20-07-2021
jow tweakdudes !

Ik heb een probleempje bij mijn STACK-KLASSE.
ik wil een stack maken van objecten (alles werkt goed : toevoegen verwijderen enz) maar hoe vergelijk ik objecten ? ik wil namelijk een methode : contains(Object o)
The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any reference values x and y, this method returns true if and only if x and y refer to the same object (x==y has the value true).
dit vond ik op java.sun.com ... kan ik dus niet gebruiken.
mijn code :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public boolean contains(Object o)
     { 
     
     Object temp = new Object();
     boolean gevonden = false;
     Object obj  = (Object)o;
         
     for (int x = 0 ; x < rij.length ; x++)
      {
        if (rij[x] != null) {  
        temp = (Object)rij[x];
       if (temp.equals(obj)) { gevonden = true; }        
       else gevonden = false;
       }
      }
    return gevonden;
     }

== gaat dus niet; .equals ook niet; ik heb ook al geprobeerd met HASHCODES maar wilde ook niet werken.

iemand een idee ?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
dan moet je een equals-methode implementeren in het object wat je opslaat (door alle velden apart te vergelijken). de standaard klassen hebben dit (vaak?) al

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

vb.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Persoon 
{
   private int sofinr=-1;
   private String name = null;

   public Persoon(int sofinr, String name)
   {
    this.sofinr = sofinr;
    this.name = name;
   }

   public int getSofinr()
   {
    return sofinr;
   }

   public boolean equals(Object item)
   {
     if(item == this)//lekker snel :)
        return true; 

     if(item == null)//verplicht..
        return false;

     if(!(item instanceof Persoon))
        return false;

     //omdat sofinr primaire sleutel is,
     //is controleren op dit veld voldoende.
     return sofinr = ((Persoon)item).getSofinr();
   } 
}

En controleren op hashcode zou ook kunnen, want objecten met dezelfde hashcode zijn per definitie dezelfde objecten.
(ik vraag me dit af, je zou denk ik best een Integer object en een String object kunnen hebben die dezelfde hashcode genereren maar toch verschillend zijn, zal dit eens uitzoeken).

Maar dan moet je zelf wel de hashCode() methode overriden.
Je zou dan ook eenmalig (of als het moet) de hashkey kunnen cachen (opslaan) en dan gebruiken voor de equals methdode..

dus:
code:
1
2
3
4
5
6
7
public void equals(Object object)
{
   if(object == null)
    return false;

   return hashCode()==object.hashcode();
}

Maar om voor ieder mogelijk object (van ieder mogelijke klasse) een unieke hashkey te generen is vrij lastig. Je zou het ook het volgende kunnen doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
public boolean equals(Object object)
{
   if(object == this)
    return true;

   if(object == null)
    return false;

   if(!(object instanceof Persoon))
     return false;

   return object.hashcode()==hashcode();
}

Hiermee hoef je alleen voor 1 klasse uniekheid van hashkey te garanderen. Maar tis wel vrij lastig, en denk dat dit buiten het bestek valt.

  • Tomatrix
  • Registratie: Juni 1999
  • Laatst online: 27-02-2025
Op vrijdag 23 november 2001 15:21 schreef Dieter het volgende:
code:
1
2
if (temp.equals(obj)) { gevonden = true; }       
else gevonden = false;
... en kijk nu eens heel goed wat hier gebeurt. Tenzij het te vinden object het laatste element is, wordt gevonden altijd op false gezet.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op vrijdag 23 november 2001 16:34 schreef Tomatrix het volgende:

[..]

... en kijk nu eens heel goed wat hier gebeurt. Tenzij het te vinden object het laatste element is, wordt gevonden altijd op false gezet.
Had ik nog niet eens gezien :)

  • Dieter
  • Registratie: Januari 2001
  • Laatst online: 20-07-2021
aaahzooo ! dank je :)
verdorie toch zo'n stomme fout ;)

ff proberen
Pagina: 1