6.1.5 Java-Version

In Java können Containertypen implementiert werden, indem man einen Datentyp schafft, der alle nötigen Verwaltungsinformationen für ein Element beinhaltet, sowie eine Referenz auf die eigentlichen Nutzdaten.

Als Testdatentyp sieht der Student folgendermaßen aus (diese Klasse wird übrigens auch für die Musterlösung Java-Version zur Aufgabe Geschlossenes Hashing und andere verwendet):

/*  1 */ // Time-stamp: "(13.05.02 21:46) Student.java [Klaus@Wachtler.de]"
/*  2 */ //
/*  3 */ // Testklasse zum Einfügen in einen Container
/*  4 */
/*  5 */ import java.util.*;
/*  6 */
/*  7 */ public class Student
/*  8 */ {
/*  9 */     private String   VorName;
/* 10 */     private String   NachName;
/* 11 */     public  int      Matrikelnummer;
/* 12 */
/* 13 */     public Student()
/* 14 */     {
/* 15 */         VorName = NachName = "?";
/* 16 */         Matrikelnummer = -1;
/* 17 */     }
/* 18 */
/* 19 */     public Student( String v, String n, int m )
/* 20 */     {
/* 21 */         VorName = v;
/* 22 */         NachName = n;
/* 23 */         Matrikelnummer = m;
/* 24 */     }
/* 25 */
/* 26 */     public String toString()
/* 27 */     {
/* 28 */         return "<" + VorName + " "
/* 29 */                + NachName + " "
/* 30 */                + Matrikelnummer  + ">";
/* 31 */     }
/* 32 */
/* 33 */     // vergleicht zwei Studenten auf Gleichheit
/* 34 */     public boolean equals( Object s )
/* 35 */     {
/* 36 */         return Matrikelnummer==((Student)s).Matrikelnummer;
/* 37 */     }
/* 38 */
/* 39 */
/* 40 */ } // class Student

Meine Implementation des generischen Feldes mit linearer Suche ist folgende:

/*  1 */ // Time-stamp: "(13.05.02 21:48) Feld.java [Klaus@Wachtler.de]"
/*  2 */ //
/*  3 */ // Containerklasse für ein einfaches Feld mit linearer Suche
/*  4 */
/*  5 */ import java.util.*;
/*  6 */
/*  7 */ public class Feld
/*  8 */ {
/*  9 */     private Object[] nutzdaten;
/* 10 */     private int anzahl = 0;
/* 11 */
/* 12 */     // Konstruktor:
/* 13 */     // bekommt gewünschte Anzahl Feldelemente übergeben
/* 14 */     public Feld( int n )
/* 15 */     {
/* 16 */         anzahl = n;
/* 17 */         nutzdaten = new Object[anzahl];
/* 18 */     }
/* 19 */
/* 20 */     public void setzeElement( int index, Object o )
/* 21 */     {
/* 22 */         nutzdaten[index] = o;
/* 23 */     }
/* 24 */
/* 25 */     public Object sucheLinear( Object o )
/* 26 */     {
/* 27 */         for( int i=0; i<anzahl; i++ )
/* 28 */         {
/* 29 */             if( nutzdaten[i].equals( o ) )
/* 30 */             {
/* 31 */                 return nutzdaten[i];
/* 32 */             }
/* 33 */         }
/* 34 */         return null;
/* 35 */     }
/* 36 */
/* 37 */ } // class Feld

Das Testprogramm könnte so aussehen:

/*  1 */ // Time-stamp: "(14.05.02 00:35) teste_SucheStudenten.java [Klaus@Wachtler.de]"
/*  2 */ //
/*  3 */ // Testprogramm für Container-Klasse Feld
/*  4 */ //
/*  5 */ // javac teste_SucheStudenten.java Student.java Feld.java
/*  6 */ // java teste_SucheStudenten
/*  7 */
/*  8 */ import java.util.*;
/*  9 */
/* 10 */ public class teste_SucheStudenten
/* 11 */ {
/* 12 */     public static void main( String args[] )
/* 13 */     {
/* 14 */         Feld   f = new Feld( 5 );
/* 15 */         f.setzeElement( 0, new Student( "Kurt", "Pappnase", 978123 ) );
/* 16 */         f.setzeElement( 1, new Student( "Hein", "Meier", 987456 ) );
/* 17 */         f.setzeElement( 2, new Student( "Fritz", "Schmidt", 998159 ) );
/* 18 */         f.setzeElement( 3, new Student( "Klaus", "Lahm", 988123 ) );
/* 19 */         f.setzeElement( 4, new Student( "Sina", "Flink", 977111 ) );
/* 20 */
/* 21 */         Student schluessel = new Student( "", "", 987456 );
/* 22 */
/* 23 */         System.out.println( f.sucheLinear( schluessel ) );
/* 24 */
/* 25 */         System.out.println( "ok" );
/* 26 */     }
/* 27 */
/* 28 */ } // public class teste_SucheStudenten

Anmerkung: In Java ist es üblich, Container (also allgemeine Datentypen wie Listen, Bäume, Vektoren, etc., die wiederum Mengen von anderen Daten, den eigentlichen Nutzdaten, verwalten) mit einer Referenzsemantik auszustatten; siehe Referenzsemantik, Wertsemantik.



www.wachtler.de