Hochschule Harz Programmierung1 Aufgabe 10: FB Automatisierung und Informatik Dipl.-Inf. Dipl.-Ing. (FH) M. Wilhelm Programmierung 1 für MI / WI Thema: Hashing und Generische Klassen Versuchsziele Kenntnisse in der Anwendung von: Benutzung einer HashMap mit einer Klasse Student Erstellen einer generischen Klasse für eine HashMap Benutzung einer HashMap durch eine generischen Klasse mit einer Klasse Student Aufgabe11 Methode test1 In dieser Aufgabe wird die in java implementierte Klasse HashMap verwendet. Erstellen Sie ein neues Eclipse Projekt OHNE core.jar: o Projektname: Aufgabe09_a o Klassenname: Aufgabe09_a Erstellen Sie eine neue Klasse o Menü File, Eintrag New, Eintrag class o Name: Aufgabe11 Kopieren Sie folgenden Code in den Editor: Tragen Sie unbedingt Ihre Matrikelnummer in den Quellcode ein. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 { private void test1() { // definieren einer HashMap mit der Klasse Student HashMap<int, Object> hash; // erstellen einer Instanz hash = new HashMap<Integer, Student>(); // nun die Studenten einfuegen // hash.put(...,...); // nun suchen /* System.out.println("\r\n\r\nTest1:"); Student std = hash.get(22345); System.out.println("Student: "+std); std = hash.get(999999); System.out.println("Student: "+std); */ // test1 1
// komplett, dient als Vorlage für test3 private void test2() { ArrayList<Student>[] array = new ArrayList[101]; for (int i=0; i<array.length; i++) { array[i]=new ArrayList<Student>(); index=std1.getmatrnr() % array.length; array[index].add(std1); index=std2.getmatrnr() % array.length; array[index].add(std2); index=std3.getmatrnr() % array.length; array[index].add(std3); System.out.println("\r\n\r\nTest2:"); key=22345 % array.length; boolean gefunden=false; for (Student std : array[key]) { if (std.getmatrnr() == 22345) { System.out.println("Gefunden: "+std); gefunden=true; if (!gefunden) { System.out.println("Nicht Gefunden: 22345"); key=13345 % array.length; gefunden=false; for (Student std : array[key]) { if (std.getmatrnr() == 22345) { System.out.println("Gefunden: "+std); gefunden=true; if (!gefunden) { System.out.println("Nicht Gefunden: 13345"); // test2 private void test3() { // erstellen einer Hashtable durch GenKlasse // 101 Elemente GenKlasse<Student> hash; 2
// hier eintragen // rest komplett System.out.println("\r\n\r\nTest3:"); key=22345; System.out.println("Gefunden: "+hash.get(key)); key=13345; System.out.println("Gefunden: "+hash.get(key)); // test3 public static void main(string[] args) { Aufgabe11 main = new Aufgabe11(); main.test1(); main.test2(); main.test3(); Ablauf: 1) Klasse Student a) Anlegen der Klasse Student b) Kopieren des Quellcodes public class Student implements Comparable { private String name; private int matrnr; public Student ( String name, int matrnr ){ this.name = name; this.matrnr = matrnr; public String getname() { return name; public void setname(string name) { this.name = name; public int getmatrnr() { return matrnr; public void setmatrnr(int matrnr) { this.matrnr = matrnr; public String tostring() { return "Name: "+name+" Matrnr: "+matrnr; public boolean equals(object obj) { Student std = (Student) obj; return name==std.name && matrnr==std.matrnr; 3
public int compareto(object obj) { Student std = (Student) obj; int r = name.compareto(std.getname()); if (r==0) { if ( matrnr<std.getmatrnr() ) return -1; else if ( matrnr>std.getmatrnr() ) return +1; else return 0; return r; Aufgabe: Implementieren Sie in der Klasse Student die Methode hashcode. public Keine Parameter Rückgabe ist die Matrikelnummer 2) Methode test1 Implementieren Sie in der Methode test1 die beiden Suchroutinen. Definieren Sie in der Methode eine Variable vom Typ HashMap o Key ist Integer o Objekt ist Student Erstellen Sie eine Instanz der HashMap Fügen Sie die Studenten mit den Matrikelnummer in die HashMap. Auskommentieren der Suche Testen Musterlösung: Test1: Student: Name: Schulze Matrnr: 22345 Student: null 4
3) Klasse GenKlasse a) Anlegen der Klasse GenKlasse b) Kopieren des Quellcodes import java.util.arraylist; public class GenKlasse<T> { ArrayList<T>[] array; // Konstruktor komplett public GenKlasse(int n) { array = new ArrayList[n]; for (int i=0; i<array.length; i++) { array[i]=new ArrayList<T>(); // Einfuegen einer Objektes // a) index bestimmen // b) array[index].add(...) public void put(t item) { des Studenten mit keyobject // a) index bestimmen // b) for-each Schleife, Abfrage ob hashcode == keyobject // wenn ja return item public T get(int keyobject) { return null; 4) Methode test3 Implementieren Sie in der Methode test3 die beiden Suchroutinen. Erstellen Sie eine eigene HashTable mit der generischen Klasse o Anzahl ist 101 Fügen Sie die drei Studenten in die Hashtable Auskommentieren der Suche Testen Musterlösung: Test2: Gefunden: Name: Schulze Matrnr: 22345 Nicht Gefunden: 22345 Test3: Gefunden: Name: Schulze Matrnr: 22345 Gefunden: null 5