# ArrayList erweitern - generics



## muluhumu (31. Mai 2007)

Hallo,

ich würde gern eine ArrayList so erweitern, das eine zusätzliche Methode randomGet() ein zufälliges Element aus der Liste zurückliefert. Eigentlich weiter kein problem, nur möchte ich das die neue Klasse RandomArrayList auch generisch ist. Ich habe keine Erfahrung damit, generische Klassen zu erweitern, wäre nett wenn mir jemand auf die Sprünge helfen könnte. Mein Gerüst sieht bisher so aus:


```
import java.util.ArrayList;

public class RandomArrayList<E> extends ArrayList<E> {

	private static final long serialVersionUID = 5672307367029458560L;
	
	public RandomArrayList() {
		
	}
}
```

Und da ist auch schon das erste Problem... wie muss ich im Konstruktor super() aufrufen, so dass die ArrayList vom Typ E erzeugt wird?

Wäre für eine Antwort sehr dankbar.

Viele Grüsse 

muluhumu


----------



## Leroy42 (31. Mai 2007)

Interessante Fragestellung!
Aber da laß ich doch unsere,
diesbezüglichen, Experten ran

(Hab nur deswegen, _geantwortet_ um über den
Eingang adäquater Antworten informiert zu werden...)


----------



## Der Müde Joe (31. Mai 2007)

muluhumu hat gesagt.:
			
		

> Und da ist auch schon das erste Problem... wie muss ich im Konstruktor super() aufrufen, so dass die ArrayList vom Typ E erzeugt wird?


gar net, oder super()


```
import java.util.ArrayList;
import java.util.Random;

public class RandomArrayList<E> extends ArrayList<E> {

	Random r = new Random();
	
	
   private static final long serialVersionUID = 5672307367029458560L;
   
   public RandomArrayList() {
   }
   
   public E getRandom(){
	   int size = this.size();
	   int random = r.nextInt(size);
	   return this.get(random);
   }
}
```

reicht.....kannst ja mal mit Strings testen


----------



## semi (31. Mai 2007)

Übernimm einfach alle Konstruktoren von ArrayList, noch ein Interface dazu und gut ist.
	
	
	
	





```
public interface RandomList<E> extends List<E>
{
   E randomGet();
}

public class RandomArrayList<E> extends ArrayList<E> implements RandomList<E>
{
   private static final long serialVersionUID = 3382872155977437852L;
   private static final Random random = new Random();

   public RandomArrayList()
   {
      super();
   }

   public RandomArrayList(int initialCapacity)
   {
      super(initialCapacity);
   }

   public RandomArrayList(Collection<E> c)
   {
      super(c);
   }
   
   public E randomGet()
   {
      return get(random.nextInt(size()));
   }
}
```


----------



## muluhumu (1. Jun 2007)

super... vielen dank!


----------

