Vergleich zweier Hashtable / mehrere Enumerations

Status
Nicht offen für weitere Antworten.

Nick

Mitglied
Hallo,

ich möchte zwei Hashtable vergleichen und versuche das mit zwei geschachtelten while-Schleifen.
Leider funktioniert das nicht. Ich meine mich auch dunkeln zu erinnern, irgendwo gelesen zu habe, dass das so nicht geht. Konnte aber nichts mehr darüber finden.

Hat jemand eine Idee? Links zum Thema wären auch toll :)

Gruß
Nicole

Code:
Enumeration v2 = hash2.elements();
Enumeration k2 = hash2.keys();
Enumeration v1 = hash1.elements();
Enumeration k1 = hash1.keys();
DBObject ok1, ov1, ok2, ov2;        
// DBObject: einfache Datentypen in Object kapseln, 
// dazugehörige Methoden getInt() und getString() liefern entsprechende Daten

// Durchlaufe zweiten Hash und vergleiche seine Elemente mit denen des ersten Hash
while (k2.hasMoreElements()) {
    ok2 = (DBObject)k1.nextElement();
    ov2 = (DBObject)v1.nextElement();
			
    while (k1.hasMoreElements()) {
        ok1 = (DBObject)k1.nextElement();
        ov1 = (DBObject)v1.nextElement();
        System.out.println("Hash2: " + ok2.getInt() + " -> " + ov2.getString() 
			+ " --- Hash1: " + ok1.getInt() + " -> " + ov1.getString());		
    }
}
 
B

Beni

Gast
Die Reihenfolge der Elemente in einer Hashtable ist immer wieder verschieden.

Wie ist es mit folgendem?
Code:
Hashtable a = ..., b = ...
a.equals( b );

Oder du machst eine Enumeration über eine Hashtable, und guckst nach, was die andere dort gespeichert hat:
Code:
public booelan same( Hashtable a, Hashtable b ){
   return a.size() == b.size() && allInside( a, b );
}

public boolean allInside( Hashtable a, Hashtable b ){
  Enumeration keys = a.keys();
  while( keys.hasMoreElements() ){
    Object k = keys.nextElement();

     Object alpha = a.get( k );
     Object beta = b.get( k );
      
     if( beta == null )
        return false;

     if( !beta.equals( alpha ))
        return false;
  }
  return true;
}
 
B

bygones

Gast
willst du vergleichen ob die beiden Hashtable das gleiche Mapping haben ?
dann nehm einfach die equals methode - die überprüft ob das gleiche Mapping existiert !

z.b.
Code:
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Arrays;
import java.util.Collections;
import java.util.Hashtable;
import java.util.StringTokenizer;

import javax.swing.JFrame;
import javax.swing.JLabel;

import sun.security.provider.certpath.CollectionCertStore;

/*
 * Created on 21.08.2004
 */

/**
 * @author deathbyaclown
 */
public class Dummy {

    public static void main(String[] args) {
        Hashtable table1 = new Hashtable();
        Hashtable table2 = new Hashtable();
        
        table1.put("1", new DummyClass("1",1));
        table1.put("2", new DummyClass("2",2));

        table2.put("1", new DummyClass("1",1));
        table2.put("2", new DummyClass("2",2));
        
        System.out.println(table1.equals(table2)); // ausgabe: true;
    }
    
    private static class DummyClass {
        String string;
        int i;
        
        public DummyClass(String s, int i) {
            string = s;
            this.i = i;
        }
        
        public int hashCode() {
            return string.hashCode() * i;
        }
        
        public boolean equals(Object o) {
            if(!(o instanceof DummyClass)) {
                return false;
            }
            DummyClass dc = (DummyClass)o;
            
            return string.equals(dc.string) && i == dc.i;
        }
    }
}
 

Nick

Mitglied
Ich möchte den Inhalt der Objekte im Hashtable vergleichen.

Also als Key sind Objekte mit Inhalt int gespeichert, als Values Objekte mit Inhalt long.
Ich möchte jetzt für jeden Key aus hash2 wissen, ob der der Inhalt dieses Keys auch Inhalt eines Keys in hash1 ist und den entsprechenden Value aus hash1 auslesen.
 

meez

Top Contributor
So?

Code:
long hash1value;
Integer key;
for (Enumeration e = hash2.keys();e.hasMoreElements();) {
   key = (Integer) e.nextValue();
    if (hash1.containsKey(key)) {
        hash1value = ((Long) hash1.get(key)).longValue();
        //mache irgendwas
    }      
}
 

Nick

Mitglied
Das sieht schon gut aus. Liefert mir aber mit "nextElement()" statt "nextValue()" eine ClassCastException. :bahnhof:
 

meez

Top Contributor
Nick hat gesagt.:
Das sieht schon gut aus. Liefert mir aber mit "nextElement()" statt "nextValue()" eine ClassCastException. :bahnhof:

Ich Depp..Es muss natürlich heissen nextElement();
Wegen der Exception ?? Hast du den nicht Integer Werte?...
Ist eigentlich auch egal:

Code:
long hash1value;
Object key;
for (Enumeration e = hash2.keys();e.hasMoreElements();) {
   key =  e.nextElement();
    if (hash1.containsKey(key)) {
        hash1value = ((Long) hash1.get(key)).longValue();
        //mache irgendwas
    }     
}
 

Nick

Mitglied
Hallo alle zusammen,

habe das Problem jetzt mit Hilfe von außerhalb lösen können. Und möchte zur Vervollständigung die Lösung posten.

Die innere while-Schleife wird nur einmal durchlaufen und dann ist der Pointer am Ende.
Lösung: Die Definitionen von k1, v1 müssen in die äußere while-Schleife, damit der Pointer für die innere while-Schleife wieder am Anfang sitzt:

Code:
Enumeration v2 = hash2.elements(); 
Enumeration k2 = hash2.keys(); 
    //-> hier die Enumerations weg
DBObject ok1, ov1, ok2, ov2;        
// DBObject: einfache Datentypen in Object kapseln, 
// dazugehörige Methoden getInt() und getString() liefern entsprechende Daten 

// Durchlaufe zweiten Hash und vergleiche seine Elemente mit denen des ersten Hash 
while (k2.hasMoreElements()) { 
    ok2 = (DBObject)k1.nextElement(); 
    ov2 = (DBObject)v1.nextElement(); 
    // -> und dafür hier hin 
    Enumeration v1 = hash1.elements(); 
    Enumeration k1 = hash1.keys(); 

          
    while (k1.hasMoreElements()) { 
        ok1 = (DBObject)k1.nextElement(); 
        ov1 = (DBObject)v1.nextElement(); 
        System.out.println("Hash2: " + ok2.getInt() + " -> " + ov2.getString() 
         + " --- Hash1: " + ok1.getInt() + " -> " + ov1.getString());       
    } 
}

Danke für Eure Mühe
Grüße
Nicole
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Vergleich zweier Felder Allgemeine Java-Themen 3
F Vergleich zweier Listen Allgemeine Java-Themen 4
J vergleich zweier datenstrukturen Allgemeine Java-Themen 6
Neumi5694 double Vergleich Allgemeine Java-Themen 19
M Vergleich C# und Java Allgemeine Java-Themen 24
D Vergleich OracleJDK/OpenJDK Allgemeine Java-Themen 7
T Komplexitätsoptimierung String vergleich Allgemeine Java-Themen 4
T If Vergleich ergibt nicht das richtige Ergebnis Allgemeine Java-Themen 2
K Vergleich von Strings von Objekten Allgemeine Java-Themen 4
E Problem mit Array vergleich Allgemeine Java-Themen 4
M Vergleich (unscharf) von Screenshots Allgemeine Java-Themen 0
L Vergleich-Xml-Daten Allgemeine Java-Themen 3
S BufferedImage vergleich mit Subimage Allgemeine Java-Themen 1
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
M Datums vergleich klappt überhaupt nicht.. Allgemeine Java-Themen 4
S Calendar vergleich Allgemeine Java-Themen 2
G Zeilenweiser Vergleich Allgemeine Java-Themen 10
E Vorschläge, effizientes Hashing von Dateien für vergleich Allgemeine Java-Themen 7
W Vergleich eines Datenträgers auf neue Dateien Allgemeine Java-Themen 14
C Vergleich von Enums gibt inkorrekte Werte Allgemeine Java-Themen 6
N Input/Output Vergleich von identischen Strings schlägt fehl Allgemeine Java-Themen 5
N Vergleich eigener Klassen Allgemeine Java-Themen 5
P J-Unit vergleich von 2 Objekten merkwürdig Allgemeine Java-Themen 7
K GUI-Button Inhalte vergleich - TicTacToe Grundriss Allgemeine Java-Themen 11
N Vergleich von generischen Typen Allgemeine Java-Themen 2
S String-Vergleich in if Allgemeine Java-Themen 7
P JNA - JNI - pures Java - Vergleich Allgemeine Java-Themen 6
M Vergleich von TreeSet<HashSet>^2 Allgemeine Java-Themen 8
U Java Performance im Vergleich zu C++ in speziellem Anwendungsfall Allgemeine Java-Themen 6
D Was ist schneller? Zuweisung oder Vergleich? Allgemeine Java-Themen 18
O String NICHT vergleich Allgemeine Java-Themen 7
G Vergleich von .jpg Dateien Allgemeine Java-Themen 2
I vergleich und zählen von Strings Allgemeine Java-Themen 7
K Vergleich von Icons . Allgemeine Java-Themen 8
N vergleich mit while und for schleife Allgemeine Java-Themen 7
M Vergleich im geordeten Vector und Methodenaufruf Allgemeine Java-Themen 2
minzel String in String (Vergleich) Allgemeine Java-Themen 2
P Vergleich: Java - .net Allgemeine Java-Themen 5
T Vergleich von Tastatureingabe mit dem was in der Datei steht Allgemeine Java-Themen 21
N Split -> IF-String vergleich Allgemeine Java-Themen 5
C Performance Vergleich, Java vs. Tcl/Tk Allgemeine Java-Themen 3
B bit vergleich oder regex Allgemeine Java-Themen 1
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
B Kollision zweier Kugeln im R² Allgemeine Java-Themen 2
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
C Gemeinsame Oberklasse zweier Generics Allgemeine Java-Themen 10
Tausendsassa Input/Output Problem mit der gleichzeitigen Ausgabe zweier Threads Allgemeine Java-Themen 8
T Parallelisierung zweier BigInteger-Funktionen Allgemeine Java-Themen 6
M Zugriff zweier Threads auf diesselbe Methode Allgemeine Java-Themen 16
R Objektsynchronisierung zweier Listen?!?! Allgemeine Java-Themen 2
data89 [Kurze Frage] Ähnlichkeit zweier Strings ermitteln Allgemeine Java-Themen 19
J Endlosschleife durch wechselseitigen Zugriff zweier Klassen? Allgemeine Java-Themen 2
P gegenseitige Methodenaufrufe zweier Klassen Allgemeine Java-Themen 14
MQue Verbindung zweier Klasse Allgemeine Java-Themen 13
D Generalisierungsbeziehung zweier Klassen Allgemeine Java-Themen 5
D Seltsame Ausgabe beim zusammenführen zweier Dateien Allgemeine Java-Themen 14
Z Verknüpfung zweier Klassen! Allgemeine Java-Themen 2
M run()-Code zweier Threads strikt abwechselnd ausführen Allgemeine Java-Themen 7
S Hashtable Fehler Allgemeine Java-Themen 14
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
O Zeichenkette aus Zeichenkette ersetzen mit Hashtable Allgemeine Java-Themen 8
B hashtable für unterschiedliche Typen - mit Generics Allgemeine Java-Themen 8
S Hashtable in beide Richtungen? Allgemeine Java-Themen 4
A Verständnisproblem zur Hashtable Allgemeine Java-Themen 10
M Hashtable ? Allgemeine Java-Themen 13
M Hashtable ! Allgemeine Java-Themen 13
E 2dimensionale Hashtable Allgemeine Java-Themen 4
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
T Konstruktor von Hashtable unter Java 5.0! Allgemeine Java-Themen 3
J Hashtable Allgemeine Java-Themen 3
G hashtable mit objekten Allgemeine Java-Themen 9
S Generics Hashtable mit "neuer" for-Schleife ausles Allgemeine Java-Themen 4
R Wert in Hashtable ändern (Key ändern, Value bleibt) Allgemeine Java-Themen 3
S Hashtable vs. Array Allgemeine Java-Themen 3
A HILFE: subclass von Hashtable mit listener aufstellen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben