2010-09-16 5 views
25

Was wäre einem std :: vector in Java am nächsten? Damit meine ich eine Klasse, die T in ihren Konstruktor aufnehmen kann und dann pushBack, popBack() und das im fortlaufenden Speicher (nicht verknüpfte Liste) gespeichert wird.Äquivalent von std :: vector in Java?

Dank

+0

Aus Neugier, warum brauchen Sie etwas, das noch im Dauerspeicher gespeichert wird, hat eine Push-und Pop-Betrieb wie ein Stapel? –

+1

@ferrari Fan: Ich nehme an, er erwähnt nur diejenigen, da C++ 's Vektorklasse ähnliche Methoden hat. – casablanca

+1

Was ist kontinuierliches Gedächtnis? – fastcodejava

Antwort

31

ArrayList
in Array gespeichert ist alles, was ("continuous memory") intern, obwohl Operationsnamen ein wenig unterschiedlich sind.

A bit more about list implementations in Java
And about generics

bearbeiten
Helper-Methode auch nützliche Klasse in seiner Antwort erwähnt (wenn auch nicht genau äquivalent zu C++ Vector).

+1

Kann kein Java Vector anstelle von ArrayList verwendet werden? –

2

Ist ArrayList das, wonach Sie suchen?
ArrayList l = new ArrayList<String>();
So können Sie eine Liste von allem haben (definiert zwischen <>).

7

Das wäre wahrscheinlich ArrayDeque, wenn Sie Stack-Funktionalität benötigen.

Verwenden Sie nicht die Stack Klasse wie andere hier vorschlagen.

+2

Guter Aufruf, obwohl 'ArrayList' immer noch eine engere Übereinstimmung wäre, da er den Zugriff auf indizierte Elemente wie den C++' vector' unterstützt. – casablanca

1

Sie können eine ArrayDeque verwenden, ist es nicht random access aber Unterstützung Deque (Deque) Methoden

0

Wie wäre es einfach die Vector-Klasse nicht unterstützt?

http://download-llnw.oracle.com/javase/6/docs/api/java/util/Vector.html

+2

'Vector' ist ziemlich veraltet, verwenden Sie stattdessen' ArrayList'. –

+0

Ich stehe korrigiert. Es scheint, dass dieser Punkt auch hier diskutiert wurde http://stackoverflow.com/questions/1386275/why-java-vector-class-is-sidered-obsolete-or-precated –

2

Sie suchen wahrscheinlich für die ArrayDeque, die effizient Push/Pop-Stil Zugang von beiden Enden der Liste unterstützt.

VermeidenStack und Vector - diese synchronisiert sind, die in der Regel sinnlos Aufwand bedeutet.

ArrayList ist auch in Ordnung; Sie müssen jedoch Ihre eigene (triviale) pop-Methode implementieren, da sie nicht von der Klasse selbst bereitgestellt wird. ArrayList erlaubt indizierten Zugriff, der ArrayDeque fehlt.

0

Was Sie brauchen, ist genau ein java.util.ArrayList<T> Sie die Dokumentation überprüfen in http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

Im Grunde eine Liste mit einem Array implementiert ist, wo die Referenzen in einem kontinuierlichen Teil des Speichers leben.

Ich empfehle wie dies in Kombination mit einem Interface-Variable zu verwenden: List<String> stringList = new ArrayList<String>(); also, wenn Sie sich entscheiden, können Sie die Implementierung java.util.LinkedList<T> oder einen anderen wechseln.

1

Ich denke, es der LinkedList ist

vector (c++) <===========> linkedlist(java) 
v.front()  <===========> l.peekFirst() 
v.back()  <===========> l.peekLast() 
v.push_back(x) <===========> l.add(x) 
v.pop_back() <===========> l.pollLast()