Generische ArrayList, CastProblem

Lybrial

Bekanntes Mitglied
Hallo Leute,

sitze nun seid einigen Stunden an einem Problem.
Habe mir eine eigene generische Array-List geschrieben in die ich nun einige Werte stecke,
die ich sortieren möchte. Beim ausführen bekomme ich allerdings immer folgende Exeption und
ich weiß nicht warum:


Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
at Uebung_05.ArrayList.getArray(ArrayList.java:178)
at Uebung_05.ArrayList.add(ArrayList.java:30)
at Uebung_05.Test.main(Test.java:8)

Die ArrayList:
Java:
public class ArrayList<T extends Comparable<T>> extends AlgDatContainer<T>{
	private int mLastIndex;
	private Object[] mArray;
	//*****Konstruktor***********************
	public ArrayList(){
		this(new Object[42]);
	}
	//*****Konstruktor***********************
	public ArrayList(int aSize){
		setArray(new Object[aSize]);
		setLastIndex(0);
	}
	//*****Konstruktor***********************
	public ArrayList(Object[] aArray){
		setArray(aArray);
		setLastIndex(aArray.length);
	}
	//*********************************************************************
	public int quantity(){
		return getLastIndex();
	}
	//*********************************************************************
	public void add(T aObject){
		if(getLastIndex() == getArray().length){
			arrayGrow();
		}
		getArray()[getLastIndex()] = aObject;
		mLastIndex++;
	}
	//*********************************************************************
	public T objectAtIndex(int aIndex){
		return getArray()[aIndex];
	}
	//*********************************************************************
	public boolean addObjectAtIndex(int aIndex, T aObject){
		if(aIndex >= 0 && aIndex <= quantity()){
			if(getLastIndex() == getArray().length){
				arrayGrow();
			}
			for(int i = getLastIndex(); i > aIndex; i--){
				getArray()[i] = getArray()[i-1];
			}
			getArray()[aIndex] = aObject;
			return true;
		}
		else
			return false;
	}
	//*********************************************************************
	public boolean deleteObjectAtIndex(int aIndex){
		if(aIndex >= 0 && aIndex <= quantity()){
			for(int i = aIndex; i < getLastIndex()-1; i++){
				getArray()[i] = getArray()[i+1];
			}
			mLastIndex--;
			getArray()[getLastIndex()] = null;
			return true;
		}
		else
			return false;
	}
	//*********************************************************************
	public int deleteObject(T aObject){
		int count = 0;
		for(int i = 0; i < getArray().length; i++){
			if(getArray()[i] == aObject){
				deleteObjectAtIndex(i);
				count++;
			}
		}
		return count;
	}
	//*********************************************************************
	public boolean isInArray(T aObject){
		for(int i = 0; i < getLastIndex(); i++){
			if(getArray()[i] == aObject){
				return true;
			}
		}
		return false;
	}
	//*********************************************************************
	private void arrayGrow(){
		Object vArray[] = new Object[getArray().length*2];
		for(int i = 0; i < getArray().length; i++){
			vArray[i] = getArray()[i];
		}
		setArray(vArray);
	}
	//*********************************************************************
	public void insertionSort(){
		for(int i = 1; i < getLastIndex(); i++){
			int pos = binarySearch(0, i, getArray()[i]);
			T temp = getArray()[i];
			
			for(int j = i; j > pos; j--){
				getArray()[j] = getArray()[j-1];
			}
			getArray()[pos] = temp;
		}
	}
	//*********************************************************************
	public void shellSort(){
		int[] spalten = {2147483647, 1131376761, 410151271, 157840433,
			    58548857, 21521774, 8810089, 3501671, 1355339, 543749, 213331,
			    84801, 27901, 11969, 4711, 1968, 815, 271, 111, 41, 13, 4, 1}; 			
		
		for(int step : spalten){              											
			for(int j = step; j < getLastIndex(); j++){     							
				T toMove = getArray()[j];           										
				int k = j;                         										
			    while(k >= step && toMove.compareTo(getArray()[k-step]) < 0){   		
			    	getArray()[k] = getArray()[k-step];
			        k = k - step;
			    }
			    	getArray()[k] = toMove;                						
			}
		}
	}
	//*********************************************************************
	public void bubbleSort(){
		for(int i = getLastIndex()-1; i > 0; i--){
	        for(int j = 0 ; j < i; j++){
	            if(getArray()[j].compareTo(getArray()[j+1]) > 0) {
	            	T temp = getArray()[j];
	                getArray()[j] = getArray()[j+1];
	                getArray()[j+1] = temp;
	            }
	        }
	    }
	}
	//*********************************************************************
	public void straightSelectionSort(){
        int lowest = 0;
        T temp;
        for(int i = 0; i < getLastIndex(); i++){
            for(int j = i; j < getLastIndex(); j++) {
                if(getArray()[lowest].compareTo(getArray()[j]) > 0){
                    lowest = j;
                }
            }
            if(lowest != i){
            	temp = getArray()[i];
            	getArray()[i] = getArray()[lowest];
            	getArray()[lowest] = temp;
            }
            lowest = i+1;
        }
    }
	//*********************************************************************
	private int binarySearch(int left, int right, T aObject){
		int mid = (left+right)/2;
		if(left > right){
			return left;
		}
		else if(getArray()[mid].equals(aObject)){
			return mid;
		}
		else if(getArray()[mid].compareTo(aObject) > 0){
			return binarySearch(left, mid-1, aObject);
		}
		else{
			return binarySearch(mid+1, right, aObject);
		}
	}
	//*********************************************************************
	public int getLastIndex(){
		return mLastIndex;
	}
	private void setLastIndex(int mLastIndex){
		this.mLastIndex = mLastIndex;
	}
	public T[] getArray(){
		return (T[])mArray;
	}
	private void setArray(Object[] mArray){
		this.mArray = mArray;
	}
}

Der Container:
Java:
public abstract class AlgDatContainer <T>{
	public abstract int quantity();
	public abstract void add(T aObject);
	public abstract T objectAtIndex(int aIndex);
	public abstract boolean addObjectAtIndex(int aIndex, T aObject);
	public abstract boolean deleteObjectAtIndex(int aIndex);
	public abstract int deleteObject(T aObject);
	public abstract boolean isInArray(T aObject);
}

Die Testklasse:
Java:
public class Test {
	public static void main(String []args){
        String[] strAr = {"Carolin", "Marc", "Christian", "Ronja", "Micha", "Alex" };
		ArrayList<String> ar = new ArrayList<String>(strAr);

		ar.add("Michael");
		ar.add("Bob");
		ar.add("Tom");
		ar.add("Jerry");
		ar.add("Butch");
		ar.add("Spike");
		ar.add("Mutter");

		for(int i = 0; i < ar.getArray().length; i++){
			System.out.println(ar.getArray()[i]);
		}
		System.out.println("*********************************");
		System.out.println("*********************************");
		ar.bubbleSort();
		for(int i = 0; i < ar.getArray().length; i++){
			System.out.println(ar.getArray()[i]);
		}
	}
}

Wo liegt das Cast Problem und wie kann ich es verhindern?

Danke im vorraus ;)
 
S

SlaterB

Gast
du hast ein Object[] und Java will das auf Comparable casten, weil soviel von T auch zur Laufzeit bekannt ist,
verwende doch ein Comparable[]
 

Lybrial

Bekanntes Mitglied
Habs mittlerweile:

Mit Comparable passt alles ;)

Bei den Casts muss man aufpassen. Ein Cast des Arrays, also ein Cast (T[])mArray, casted natürlich nicht die Inhalte des Array sondern nur die Referenz auf das Array, ein kleiner aber feiner Unterschied.
Einfach ausgedrückt:
*) mArray muss ein Object[] Array sein (alles ist ein Object!)
*) Wenn man ein Element reinsteckt, wird daraus eine Instanz der Klasse Object
*) Wenn ein Element aus mArray rausholt, ist man dafür verantwortlich dass:
1) Der Cast auf (T) gemacht wird
2) Das was man rausholt auch wirklich eine Instanz der Klasse T ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
bluerob generische ArrayList -> erbende Objekte auslesen Java Basics - Anfänger-Themen 24
J array über generische arraylist Java Basics - Anfänger-Themen 7
I Generische Funktion Java Basics - Anfänger-Themen 3
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
D Generische Klasse Java Basics - Anfänger-Themen 6
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
M Datentypen Generische Datentypen - Syntax Java Basics - Anfänger-Themen 25
O Generische Typen Java Basics - Anfänger-Themen 9
M Generische Klassen "FlaschenRegal" Java Basics - Anfänger-Themen 13
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
D statische generische Methoden Java Basics - Anfänger-Themen 3
S Wie muss ich die Generische Methode schreiben? Java Basics - Anfänger-Themen 6
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
N Generische Schnittstellen Java Basics - Anfänger-Themen 2
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
D Generische Typen Java Basics - Anfänger-Themen 20
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
L Generische Liste Java Basics - Anfänger-Themen 4
B Generische Queue programmieren Java Basics - Anfänger-Themen 5
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
A Generische Methode Java Basics - Anfänger-Themen 4
H Collections List in List<SpecificType> als stat. generische Methode zurückgeben Java Basics - Anfänger-Themen 4
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
M Generische Liste Java Basics - Anfänger-Themen 4
B Generische Methode Java Basics - Anfänger-Themen 2
B Generische Klasse Java Basics - Anfänger-Themen 7
B Generische Methoden Java Basics - Anfänger-Themen 8
F Collections Generische Klasse/Methoden Java Basics - Anfänger-Themen 19
L Generische Warteschlange Java Basics - Anfänger-Themen 8
A Generische Datentypen Java Basics - Anfänger-Themen 8
L Generische Containerklasse Java Basics - Anfänger-Themen 9
V Methoden Umwandlung in generische Methode Java Basics - Anfänger-Themen 8
A Generische Collections und Vererbung Java Basics - Anfänger-Themen 2
S Generische HashMap Java Basics - Anfänger-Themen 2
M Klassen Generische Klassen, Personen und Gruppen Java Basics - Anfänger-Themen 6
W generische Module Java Basics - Anfänger-Themen 2
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
D Datentypen Generische Collections und Warnings Java Basics - Anfänger-Themen 8
F Generische Methoden Problem Java Basics - Anfänger-Themen 5
E Generische Arrays durch Typecast mit Object-Array Java Basics - Anfänger-Themen 11
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
B Generische Vererbung was ist der Unterschied? Java Basics - Anfänger-Themen 4
W Generische Klassen Java Basics - Anfänger-Themen 3
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
F Generische Typen auch für statische Methoden? Java Basics - Anfänger-Themen 13
B instanceof Prüfung für generische Typen Java Basics - Anfänger-Themen 5
N 2 dimensionale generische Arrays Java Basics - Anfänger-Themen 9
H Statische generische Methode Java Basics - Anfänger-Themen 2
G Frage zum Ungang mit Generische Datentypen Java Basics - Anfänger-Themen 4
0x7F800000 generische arrays mal wieder )-; Java Basics - Anfänger-Themen 6
D generische methode <T> void . Java Basics - Anfänger-Themen 9
J Generische Methoden Java Basics - Anfänger-Themen 6
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
S Parameterübergabe: Generische Klasse Java Basics - Anfänger-Themen 4
S generische Felder Java Basics - Anfänger-Themen 2
P Generische Klasse Java Basics - Anfänger-Themen 8
C Generische Klassen, das erste Mal. Java Basics - Anfänger-Themen 8
F Generische Methode - was bringt der Wildcard Operator? Java Basics - Anfänger-Themen 7
F Generische Liste von generischen Objekten. Java Basics - Anfänger-Themen 3
H generische Methoden Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
H generische Bausteine, heterogene Datenstrukturen Java Basics - Anfänger-Themen 2
J generische klassen neue Instanz Java Basics - Anfänger-Themen 5
H Generische Klassen. Java Basics - Anfänger-Themen 16
krgewb ArrayList allgemein halten Java Basics - Anfänger-Themen 6
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
W if-Abfrage bei ArrayList-Methodenaufrufen - Wie löse ich das? Java Basics - Anfänger-Themen 6
W ArrayList und toString Java Basics - Anfänger-Themen 17
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
M 2d ArrayList durchgehen Java Basics - Anfänger-Themen 2
Blkckroll45 Arraylist Java Basics - Anfänger-Themen 6
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46

Ähnliche Java Themen

Neue Themen


Oben