Что будет самым близким к std::vector в Java? Под этим я подразумеваю класс, который может принимать T в его конструктор, а затем pushBack, popBack() и который хранится в непрерывной памяти (не связанный список).
Спасибо
Что будет самым близким к std::vector в Java? Под этим я подразумеваю класс, который может принимать T в его конструктор, а затем pushBack, popBack() и который хранится в непрерывной памяти (не связанный список).
Спасибо
ArrayList
Все хранится в массиве ( "непрерывная память" ) внутри, хотя имена операций немного разные.
Немного больше о реализациях списков в Java
И о дженериках
изменить
Помощник также упомянул полезный класс в своем ответе (хотя и не совсем эквивалентен С++ Vector).
Это может быть ArrayDeque, если вам нужны функции стека.
Не используйте класс Stack, как здесь предлагают другие.
Является ли ArrayList тем, что вы ищете? ArrayList l = new ArrayList<String>();
Таким образом, вы можете иметь список чего-нибудь (определенного между < > ).
Вероятно, вы ищете ArrayDeque
, который эффективно поддерживает доступ в стиле push/pop с обоих концов списка.
Избегайте Stack
и Vector
- они синхронизированы, что подразумевает, как правило, бессмысленные служебные данные.
ArrayList
также прекрасен; однако вам нужно будет реализовать свой собственный (тривиальный) метод pop, поскольку он не предоставляется самим классом. ArrayList
разрешает индексированный доступ, который ArrayDeque
отсутствует.
Вы можете использовать ArrayDeque
, он не поддерживает произвольный доступ, но поддерживает методы Deque
(двойной конец очереди)
Я думаю, что это LinkedList
vector (c++) <===========> linkedlist(java)
v.front() <===========> l.peekFirst()
v.back() <===========> l.peekLast()
v.push_back(x) <===========> l.add(x)
v.pop_back() <===========> l.pollLast()
Java имеет стек, который поддерживает push и pop. (http://download.oracle.com/javase/6/docs/api/java/util/Stack.html)
Как насчет просто класса Vector?
http://download-llnw.oracle.com/javase/6/docs/api/java/util/Vector.html
То, что вам нужно, это именно java.util.ArrayList<T>
Вы можете проверить документацию в http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
В основном это List, реализованный с массивом, где ссылки живут в непрерывном блоке памяти.
Я рекомендую использовать в комбинации с переменной интерфейса следующим образом: List<String> stringList = new ArrayList<String>();
поэтому, если вы решите, вы можете изменить реализацию на java.util.LinkedList<T>
или на другую.