
/*
Löschen doppelter Elemente.

Suchmethoden wie removeElement, indexOf, contains usw.
haben einen Parameter elem vom Typ Object.
Zum Auffinden des Elements elem in dem Vektor rufen diese Suchmethoden
die Methode equals auf, die in der Klasse Object definiert ist:
   public boolean equals(Object obj);
equals liefert true, wenn elem eine Referenz(!!!!!) auf das Objekt
ist, auf das equals angewandt wird. D.h.:
   x.equals(y) genau dann, wenn x und y Referenzen auf dasselbe
   Objekt sind.

Versuchen Sie zunaechst, die Ausgabe der Methode
doppelteLoeschen.main() nachzuvollziehen.

Erweitern Sie anschliessend die Klasse Kunde um eine Methode equals,
welche die Methode equals der Klasse Object ueberschreibt:
   zwei Kunden sind gleich, wenn ihre Attribute(!) gleich sind.
Testen Sie Ihre Methode equals.
*/

import java.util.*;
import utilities.TastaturEingabe;

public class DoppelteLoeschen
{
   static void kundenAusgeben(String Titel, Vector v)
   {
      System.out.println(Titel);
      for (int i = 0; i < v.size(); i++)
      {
         Kunde o = (Kunde)v.elementAt(i);
         System.out.print(i + ": ");
         o.drucken();
      }
      System.out.println();
   }

   public static void loescheDuplikate(Vector v)
   {
      int index;
      for (int i = 0; i < v.size(); i++)
      {
         while (true)
         {
            index = v.indexOf(v.elementAt(i), i+1);
            System.out.println("index= " + index);
            if (index != -1)
               v.removeElementAt(index);
            else
               break;   // kein Duplikat von i-tem Element
            kundenAusgeben("geloescht wird Element [" + i + "]", v);
            TastaturEingabe.warte();
         }
      }
   }

   public static void main(String[] argv)
   {
      Vector v = new Vector(5, 3);

      // Kunden-Elemente an v anfuegen
      Kunde p1 = new Kunde("Schmidt", "Otto", "Kiel");
      Kunde p2 = new Kunde("Adel", "Suse", "Ulm");
      Kunde p3 = new Kunde("Magg", "Eva", "Kiel");

      v.addElement((Kunde)p1);
      v.addElement((Kunde)p2);
      v.addElement(new Kunde("Magg", "Eva", "Kiel"));
      v.addElement((Kunde)p3);
      v.addElement(new Kunde("Magg", "Eva", "Kiel"));

      // Kunden-Elemente einfuegen
      v.insertElementAt((Kunde)p2, 1);
      v.insertElementAt((Kunde)p1, 3);
      v.insertElementAt((Kunde)p3, 2);
      v.insertElementAt(new Kunde("Adel", "Suse", "Ulm"), 4);

      kundenAusgeben("Alles", v);

      // alle doppelten Eintraege Loeschen
      loescheDuplikate(v);
      kundenAusgeben("ohne Duplikate", v);
   }
}

