Vector

Status
Nicht offen für weitere Antworten.

KalleM

Aktives Mitglied
Hallo,
habe ein paar fragen zu der Vector Klasse.

Ich habe eine Klasse "Liste" mit Konstruktor, Getter und Setter Methoden.
Weiter habe ich eine Klasse "Verwaltung", mit der main Methode. In dieser Klasse habe ich dann ein Klassen-Objekt, der Klasse "Liste":
Liste l = new Liste("", "").
In entsprechender Methode lese ich dann die Attribute ein und übergebe diese an das Objekt:
System.out.println("Gebe Namen ein: ")
String n = in.readLine()

System.out.println("Gebe Nummer ein: ")
int nu = Integer.parseInt(in.readLine())

l = new Liste(n, nu).

Und weise dem Vektor das Objekt zu:
v.addElement(l).

Wie kann ich denn jetzt das Objekt aus dem Vektor ausgeben? mit:
System.out.println(v.firstElement());
klappt es nicht?

mfg
 
1.) Wenn du geholfen bekommen möchtest, bitte immer die Fehlermeldung dazuposten. Warum klappt es nicht?
2.) Benutz lieber ArrayList statt Vector, ist neuer (schneller...)
 
hi
du solltest lieber eine ArrayList nehmen vector is etwas veraltet
säh dann z.B. so aus:
Java:
List elemente = new ArrayList();
List.add(n,nu); 
System.out.println( List.get(index) );

Java 2 Platform SE v1.4.2

wobei in System.out.println() glaub die toString()-methode des übergebenen Objekt ausgegeben würde d.h. du müsstest sie in deiner klasse Liste überschreiben so dass sie halt das ausgibt was du willst

btw. vllt auch etwas bessere namen als n oda nu nehmen...

mfg
 
mh,
das ein Vector nicht besonders schnell ist, ist mir bekannt. Es wird halt verlangt einen Vector zu benutzen.

Ich bekomme keine wirkliche Fehlermeldung, aber auch nicht das was ich erwarte. Die Ausgabe sieht wie folgt aus:
Liste@3a6727
 
Wenn eine Klasse die toString() MEthode nicht überschreibt, kommt immer sowas raus.
(das println von System.out ruft nämlich auf das übergebene Object toString() auf, um es ausgeben zu können)

Du müsstest in deiner selbserstellten Klasse die toString() Methode überschreiben...
 
Vector = Threadsicher (syncronized). Dadurch ist es ein wenig langsamer als ArrayList.
Zu sagen, dass man lieber ArrayList nehmen soll kommt dann wohl eher auf den Anwendungsfall an.

Allgemein arbeite ich auch lieber mit ArrayList
 
Ne, statt Vectoren sollte man entweder normale ArrayList oder ne synchronisierte ArrayList benutzen, diese erstellt man so:

ArrayList mySyncList = Collections.synchronizedList(new ArrayList());
 
Das kannte ich in dieser Form noch nicht, aber dadurch, dass sie ja nun auch synchronisiert wird, muss sich doch die Performance verschlechtern. Ist sie synced immer noch schneller als Vector?
 
Keine Ahnung. Wahrscheinlich nicht. Aber das ist völlig egal.
Vector ist deswegen hässlich, weil sich diese Klasse erst nachträglich in das Java-Collections-Framework eingegliedert wurde ("has been retrofitted" steht in den API-Docs). Einige Methoden sind dadurch z.B. überflüssig geworden, müssen aber trotzdem noch mitgeschleift werden aus Kompatibilitätsgründen.
 
Bei meinem nicht represantiven Test kam raus das Vector bei meinen PC 14% schneller ist...
Java:
import java.util.*;

public class VectorVSSyncArrayList{

	public final static int ENTRYS = 9999;

	public static void main(String[] args){
		long startTime = System.nanoTime();
		
		// immer eins Auskommentieren!
		testVector();
		//testArrayList();
		
		System.out.println((System.nanoTime()-startTime)/10000);
	}

	public static void testArrayList(){
		List<A> mySyncList = Collections.synchronizedList(new ArrayList <A> ());

		for(int i=0;i<ENTRYS;++i){
			mySyncList.add(new A());
		}

		for(int i=0;i<ENTRYS;++i){
			mySyncList.remove(0);
		}
	}

	public static void testVector(){

		Vector <A> vector = new Vector <A> ();

		for(int i=0;i<ENTRYS;++i){
			vector.add(new A());
		}

		for(int i=0;i<ENTRYS;++i){
			vector.remove(0);
		}
	}
}

class A{

}

Trotzdem ist ArrayList irgendwie schöner.
 
Ich bin mir nicht sicher, WAS genau du da gemessen hast. Microbenchmarks sind immer so eine Sache... 🙄 (Je nachdem, was man zeigen will, kann man für Vector einen Geschwindigkeitszuwachs von 0.6% bis 50% hindengeln). Ein möglicher Grund für schlechtere Performance ist natürlich, dass bei der SynchronizedList ALLE Aufrufe "weiterdelegiert" werden. Aber ich finde, man kann durchaus einen Vector statt einer SynchronizedList verwenden, wenn (und NUR wenn) man den Vector NUR über das List-Interface anspricht....
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben