2010-09-16 19 views
25

¿Qué sería lo más parecido a un std :: vector en Java? Con esto quiero decir, una clase que puede tomar T en su constructor y luego pushBack, popBack() y que se almacena en la memoria continua (lista no vinculada).Equivalente a std :: vector en Java?

Gracias

+0

Por curiosidad, ¿por qué se necesita algo que se almacena en la memoria continua sin embargo, tiene un empuje y la operación pop al igual que una pila? –

+1

@ferrari fan: supongo que solo los menciona, ya que la clase vectorial de C++ tiene métodos similares. – casablanca

+1

¿Qué es la memoria continua? – fastcodejava

Respuesta

31

ArrayList
almacenada en array ("memoria continua") de todo internamente, aunque los nombres de operación son un poco diferentes.

A bit more about list implementations in Java
And about generics

edición
ayudante Método también mencionado clase útil en su respuesta (aunque no es exactamente equivalente a C++ Vector).

+1

¿No se puede usar un Vector de Java en lugar de ArrayList? –

2

¿Es ArrayList lo que estás buscando?
ArrayList l = new ArrayList<String>();
Para que pueda tener una lista de cualquier cosa (definida entre <>).

7

Eso probablemente sería ArrayDeque, si necesita la funcionalidad de pila.

No utilice la clase Stack como sugieren otras aquí.

+2

Buena llamada, aunque 'ArrayList' todavía sería una coincidencia más cercana porque admite acceso a elementos indexados como el' vector' de C++. – casablanca

1

Puede utilizar un ArrayDeque, que no admite el acceso aleatorio, pero el apoyo Deque (cola doblemente terminada) métodos

0

¿Cómo se trata simplemente de la clase Vector?

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

+2

'Vector' está bastante obsoleto, use' ArrayList' en su lugar. –

+0

Soy corregido. Parece que este punto ha sido discutido aquí también http://stackoverflow.com/questions/1386275/why-java-vector-class-is-considered-obsolete-or-deprecated –

2

Probablemente se esté buscando la ArrayDeque que soporta el acceso de estilo push/pop de ambos extremos de la lista de manera eficiente.

EvitarStack y Vector - éstos están sincronizados, lo que implica gastos indirectos generalmente inútil.

ArrayList también está bien; sin embargo, necesitaría implementar su propio método pop (trivial) ya que la clase no lo proporciona. ArrayList no permite el acceso indexado, que ArrayDeque carece.

0

Lo que se necesita es precisamente un java.util.ArrayList<T> Puede consultar la documentación en http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

Básicamente es una lista implementado con una matriz donde las referencias viven en un trozo continuo de memoria.

me recomiendan para su uso en combinación con una variable de interfaz de la siguiente manera: List<String> stringList = new ArrayList<String>(); lo que si decide, puede cambiar la implementación de java.util.LinkedList<T> u otro.

1

Creo que es la ListaEnlazada

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