# Generic



## wesa (26. Mrz 2010)

Hallo,

es wäre super, wenn mir jemand bei folgender Aufgabe helfen könnte:

Implementieren Sie die folgende Vektorklasse mittels Generics, d.h.
der Typ für die Elemente wird durch ein Generic Parameter T spezifiziert. Die
Vektorklasse sollte mindestens folgende Methoden besitzen:
• int size() // liefert die Anzahl der Elemente zurück
• void push_back(T arg) // fügt ein neues Element am Ende ein
• void push_front (T arg) // fügt ein neues Element am Anfang ein
• T get(int i) // liefert das i-te Element
• void set(int i, T arg) // setzt das i-te Element auf arg



```
class MyVector {

   private Object[] mObjects;
   private final int mIncWidth;
   private int mNextFree;

   public MyVector(int initialCapacity,int capacityIncrement) {
      mIncWidth = capacityIncrement;
      mNextFree = 0;
      mObjects = new Object[initialCapacity];
   }
   
   public MyVector(int initialCapacity) {
      this(initialCapacity,0);
   }
   
   public MyVector() {
      this(1,0);
   }
   
   public void addElement(Object obj) {
      if (mNextFree >= mObjects.length) {
            resize();
      }
      mObjects[mNextFree++] = obj;
   }
   
   private void resize() {
      final int newSize = mIncWidth==0
                               ? mObjects.length * 2
                               : mObjects.length + mIncWidth;
      Object[] newObjects = new Object[newSize];
      for(int i = 0;i < mObjects.length;++i) {
                  newObjects[i] = mObjects[i];
      }
      mObjects = newObjects;
   }
}
```


```
import java.lang.*;
class LongTime {
   public static void makeALotInsertion(MyVector vec) {
         long lStart = System.currentTimeMillis();
         for(int i = 0;i < 20000;++i)
                  vec.addElement(new Integer(i));
         long lEnd = System.currentTimeMillis();
         System.out.println("Zeit in mSec.: " + (lEnd - lStart));
   }
   
   public static void main(String[] args) {
         MyVector vec1 = new MyVector(1000,1);
         MyVector vec2 = new MyVector(1000,0);
         makeALotInsertion(vec1);
         makeALotInsertion(vec2);
   }
}
```

da ich bisher noch nix mit generics zutun hatte, wäre Hilfe echt nett


----------



## Noctarius (26. Mrz 2010)

Wo genau ist denn dein Problem, ohne Frage kann man nicht helfen.
Hast du schon etwas über Generics gelesen?

PS: Ich hab den Code mal lesbar gemacht (allein die Klammerung war unlesbar, ich hoffe das hat dir keiner so beigebracht).


----------



## SlaterB (26. Mrz 2010)

nett wäre auch eine Erklärung, wieso du diese Aufgabe bearbeiten musst, ohne vorher die zugehörigen Kenntnisse vermittelt bekommen zu haben 

alternativ lies dir
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 9 Generics, innere Klassen
durch, da wird auch exakt eine (kleinere) Containerklasse von normal auf Generics umgebaut


----------



## wesa (27. Mrz 2010)

also mein Problem liegt darin, dass ich zwar die Vorlesungen soweit verstehe, aber
nicht selbstständig programmieren kann, trotz Übung. Da wir aber im Semester
drei Übungen vorstellen müssen, bin ich auf etwas Hilfe angewiesen.

Generics kam jetzt erst in der Vorlesung dran und ich habe verstanden, dass 
Klassen in mehreren Typen parametrisiert werden können, aber wie ich da jetzt
vorgehen soll, ist mir wie meist ein Rätsel.


----------



## SlaterB (27. Mrz 2010)

hast du meinen Link gelesen, praktisch mit Vorher-Nachher-Code?


----------



## wesa (5. Apr 2010)

danke für den Tipp


----------

