В этом учебнике рассказывается о векторной структуре данных в Java с примерами. Вы научитесь создавать, инициализировать, сортировать и использовать вектор в Java в своих программах:
Вектор можно определить как динамический массив, который может увеличиваться или уменьшаться самостоятельно, т.е. вектор будет увеличиваться, когда в него добавляются новые элементы, и уменьшаться, когда из него удаляются элементы.
Такое поведение отличается от поведения массивов, которые являются статическими. Но, как и в случае с массивами, доступ к элементам вектора можно получить с помощью целочисленных индексов.
Вектор можно рассматривать как подобие другой структуры данных динамического массива, ArrayList за исключением двух приведенных ниже отличий:
- Вектор синхронизирован, т.е. все методы в векторе помечены как "синхронизированные", и поэтому после вызова метода этот же метод не может быть вызван, пока не завершится предыдущий вызов.
- Класс vector имеет много методов, которые не являются частью фреймворка коллекций, а являются его унаследованными методами.
Java Векторный класс
Класс Vector является частью " java.util "Вектор - это массив объектов или вектор объектов.
Объявление класса Vector приведено ниже:
public class Vector extends Object implements List, Cloneable, Serializable
Как показано выше, класс Vector расширяет " java.lang.object " и реализует интерфейсы List, Cloneable и Serializable.
Как создать вектор в Java?
Вы можете создать объект Vector, используя любой из следующих методов конструктора Vector.
Прототип конструктора | Описание |
---|---|
vector() | Это конструктор по умолчанию класса Vector. Он создает пустой вектор размером 10. |
vector(int initialCapacity) | Этот перегруженный конструктор создает пустой объект Vector с емкостью = initialCapacity. |
vector(int initialCapacity, int capacityIncrement) | Этот метод конструктора создает пустой объект Vector с заданными начальной емкостью (initialCapacity) и приростом емкости (capacityIncrement). |
Vector( Collection c) | Создается объект Vector с исходными элементами из заданной коллекции c. |
Давайте рассмотрим каждый из конструкторов для инициализации объектов Vector.
Инициализировать вектор
(i) Вектор()
Это конструктор по умолчанию класса Vector. Когда вы вызываете этот конструктор, создается объект Vector размером по умолчанию 10.
Общий синтаксис этого метода таков:
Vector object = new Vector();
Например,
Vector vec1 = new Vector ();
Приведенный выше оператор создает новый вектор 'vec1' с размером 10.
(ii) Vector(int initialCapacity)
Перегруженный конструктор класса Vector принимает в качестве аргумента 'initialCapacity'. Этот конструктор создает объект Vector с заданной емкостью.
Общий синтаксис метода таков:
Vector object = new Vector (initialCapacity);
Например,
Vector vec1 = new Vector (10);
Приведенный выше оператор программирования создаст объект Vector 'vec1' с емкостью 10, т.е. этот вектор может хранить до 10 элементов.
(iii) Vector(int initialCapacity, int capacityIncrement)
Это еще один перегруженный конструктор класса Vector, который создает объект Vector с заданной начальной емкостью и приращением для емкости.
Общий синтаксис этого метода следующий:
Vector object = new Vector (initialCapacity, capacityIncrement);
Например,
Vector vec1 = new Vector(5,10);
В приведенном выше утверждении начальная емкость вектора равна 5, а инкремент равен 10. Это означает, что когда в вектор будет вставлен 6-й элемент, емкость вектора увеличится до 15 (5 + 10). Аналогично, когда будет вставлен 16-й элемент, емкость вектора увеличится до 25 (15 + 10).
(iv) Вектор(коллекция c)
Последний перегруженный конструктор класса Vector принимает в качестве аргумента предопределенную коллекцию и создает Vector со всеми элементами из этой коллекции в качестве своих элементов.
Общий синтаксис таков:
Vector object = new Vector (Collection c);
Например,
Vector vec1 = new Vector(aList); где aList = {1,2,3,4,5};
Приведенный выше оператор создаст вектор 'vec1' с начальными элементами {1,2,3,4, 5}.
Держа в уме все эти описания, мы сможем реализовать программу Vector, чтобы лучше понять эти конструкторы.
Векторные методы в Java
Ниже перечислены методы, которые поддерживаются классом Vector в Java.
Название метода | Прототип | Описание |
---|---|---|
добавить | Boolean add(E e) | Добавляет заданный элемент в конец вектора. |
Void add(int index, E element) | Добавить элемент в вектор по указанному индексу. | |
addAll | Boolean addAll(Collection c) | Добавляет все элементы из заданной коллекции в конец вектора. |
Boolean addAll(int index, Collection c) | Добавляет все элементы указанной коллекции по указанному индексу. | |
addElement | void addElement(E obj) | Добавляет указанный элемент в конец вектора, увеличивая размер вектора. |
Вместимость | Int capacity() | Возвращает текущую емкость вектора. |
Очистить | Void clear() | Очищает вектор от его элементов. |
Клон | Клон объекта() | Клонирует вектор. |
Содержит | Boolean contains(Object o) | Проверяет, содержит ли вектор указанный элемент. |
содержитВсе | Boolean containsAll(Collection c) | Проверяет, содержит ли вектор все элементы, имеющиеся в данной коллекции. |
copyInto | Void copyInto(Object[] anArray) | Копирует элементы вектора в заданный массив. |
ElementAt | E ElementAt(int index) | Возвращает элемент вектора по указанному индексу. |
Элементы | Enumerationelements() | Возвращает перечислимые компоненты для вектора. |
ensureCapacity | Void ensureCapacity(int minCapacity) | Увеличивает емкость вектора для достижения заданной минимальной емкости. |
Название метода | Прототип | Описание |
---|---|---|
Равняется | Boolean equals(Object o) | Сравнивает текущий вектор с заданным вектором, чтобы проверить, равны ли они. |
firstElement | E firstElement() | Возвращает первый элемент вектора с индексом 0. |
Получить | E get(int index) | Возвращает элемент в векторе по указанному индексу. |
hashCode | int hashCode() | Возвращает значение хэш-кода для Вектора. |
indexOf | int indexOf(Object o) | находит индекс первого вхождения заданного элемента в вектор; -1, если элемент отсутствует в векторе. |
int indexOf(Object o, int index) | Поиск указанного элемента в векторе от заданного индекса в прямом направлении; возвращает индекс, если элемент найден, иначе -1, если элемент не найден. | |
insertElementAt | Void insertElementAt(E obj, int index) | Вставляет заданный объект в вектор по заданному индексу. |
isEmpty | Boolean isEmpty() | Проверяет, пуст ли вектор. |
Итератор | Iteratoriterator() | Возвращает итератор, который используется для перехода по элементам вектора. |
lastElement | E lastElement() | Возвращает последний элемент вектора. |
lastIndexOf | Int lastIndexOf(Object o) | Ищет в векторе последнее вхождение заданного элемента и возвращает индекс, или возвращает -1, если элемент не найден. |
Int lastIndexOf(Object o, int index) | Начинает поиск последнего вхождения заданного элемента от заданного индекса назад. Возвращает индекс, если элемент найден, иначе возвращает -1. | |
listIterator | ListIteratorlistIterator() | Возвращает итератор списка по элементам вектора. |
ListIteratorlistIterator(int index) | Возвращает итератор списка по элементам вектора, начиная с заданного индекса. |
Название метода | Прототип | Описание |
---|---|---|
Удалить | E remove(int index) | Удаляет элемент с заданным индексом из вектора. |
Boolean remove(Object o) | Удаляет из вектора первое вхождение заданного элемента. Если элемент отсутствует, с вектором ничего не происходит | |
removeAll | Boolean removeAll(Collection c) | Удаляет все элементы из вектора, которые присутствуют в данной коллекции. |
void removeAll Elements() | Удаляет все элементы вектора, уменьшая его размер до нуля. | |
removeElement | Boolean removeElement(Object obj) | Удаляет из вектора первое вхождение заданного элемента. |
void removeElementAt(int index) | Удаляет элемент по заданному индексу. | |
removeRange | protected void removeRange(int fromIndex, int toIndex) | Удаляет все элементы из вектора в заданном диапазоне от fromIndex (включительно), totoIndex (исключительно). |
retainAll | Boolean retainAll(Collection c) | В отличие от метода 'removeAll' метод retainAll сохраняет элементы в векторе, которые совпадают с элементами в указанной коллекции. |
установить | E set(int index, E element) | Устанавливает значение по заданному индексу с помощью нового элемента. |
Void set ElementAt(E obj, int index) | Устанавливает заданные элементы по заданному индексу. | |
setSize | Void setSize(int newSize) | Устанавливает заданный размер для данного вектора. |
Размер | int size() | Возвращает количество элементов в данном векторе или длину вектора. |
subList | ListsubList(intfromIndex, inttoIndex) | Возвращает представление или subList вектора в диапазоне от fromIndex до toIndex. |
toArray | Object[] toArray() | Преобразует заданный вектор в массив, содержащий все элементы вектора в заданном порядке. |
T[] toArray(T[] a) | Возвращает массив указанного типа, содержащий все элементы вектора. | |
toString | String toString() | Возвращает строковое представление вектора. |
trimToSize | void trimToSize() | Обрезает вектор в соответствии с текущим размером. |
Векторная реализация
Следующая Java-программа демонстрирует использование всех описанных выше методов конструктора.
import java.util.*; public class Main{ public static void main(String[] args) { //Создаем векторы v1, v2, v3 и v4 Vector v1 = new Vector(); //вектор с конструктором по умолчанию Vector v2 = new Vector(20); //вектор заданного размера //инициализируем вектор v2 значениями v2.add(10); v2.add(20); v2.add(30); Vector v3 = new Vector(30, 10); //вектор заданного размера и инкремента //создаем вектор v4 сзаданная коллекция List aList = new ArrayList(); aList.add("one"); aList.add("two"); Vector v4 = new Vector(aList); //печатаем содержимое каждого вектора System.out.println("Vector v1 Contents:" + v1); System.out.println("Vector v2 Contents:" + v2); System.out.println("Vector v3 Contents:" + v3); System.out.println("Vector v4 Contents:" + v4); } }
Выход:
В приведенной выше программе есть четыре вектора. Первый вектор v1 создается с конструктором по умолчанию. Второй вектор v2 создается с начальной емкостью 20. Затем в v2 добавляется несколько элементов. Третий вектор создается с начальной емкостью 30 и инкрементом 10.
Далее мы создаем ArrayList и создаем четвертый вектор v4 с ArrayList в качестве аргумента. Наконец, мы выводим на экран содержимое каждого из этих векторов.
Обратите внимание на содержимое четвертого вектора v4. Поскольку в качестве аргумента мы предоставили ArrayList, содержимое ArrayList становится содержимым v4.
Пример полного вектора
Теперь давайте реализуем еще одну программу, которая будет продемонстрировать создание векторов, добавление в него элементов и отображение его содержимого.
import java.util.*; public class Main { public static void main(String args[]) { //Создаем пустой вектор четных чисел Vector evenVector= new Vector (); //Добавляем элементы в вектор evenVector.add(2); evenVector.add(4); evenVector.add(6); evenVector.add(8); evenVector.add(10); evenVector.add(12); evenVector.add(14); evenVector.add(16); //Отображаем вектор System.out.println("VectorevenVector contents: " +evenVector); //удаление первого появления элемента 4 с помощью метода remove System.out.println("\nПервое появление элемента 4 удалено: "+evenVector.remove((Integer)4)); //вывод вектора System.out.println("\nVector contents after remove operation: " +evenVector); //удаление элемента с индексом 4 & вывод вектора System.out.println("\nУдаление элемента с индексом 4:" +evenVector.remove(4)); System.out.println("\nСодержание вектора после удаления: " +evenVector); //хэш-код вектора System.out.println("\nХэш-код вектора = "+evenVector.hashCode()); //получение элемента с индексом 1 System.out.println("\nЭлемент с индексом 1 = "+evenVector.get(1)); } }
Выход:
Рассмотрим еще один пример с вектором. В этой программе мы будем использовать вектор строк Мы манипулируем этим вектором, добавляя элементы, а затем выводим его размер и емкость.
import java.util.*; public class Main { public static void main(String args[]) { // создаем вектор с начальной емкостью = 2 Vector fruits_vec = new Vector(2); // добавляем элементы в вектор fruits_vec.addElement("Grapes"); fruits_vec.addElement("Melon"); fruits_vec.addElement("Kiwi"); fruits_vec.addElement("Apple"); // выводим текущий размер и емкость вектора System.out.println("Vector Size:"+fruits_vec.size()); System.out.println("Default Vector capacity increment: "+fruits_vec.capacity()); //добавляем новые элементы в вектор fruits_vec.addElement("Orange"); fruits_vec.addElement("Mango"); fruits_vec.addElement("Fig"); //печатаем текущий размер и емкость снова System.out.println("Vector Size after addition: "+fruits_vec.size()); System.out.println("Vector Capacity after increment:"+fruits_vec.capacity()); //печатать элементы вектора Перечисление fruits_enum = fruits_vec.elements(); System.out.println("\nЭлементы вектора:"); while(fruits_enum.hasMoreElements()) System.out.print(fruits_enum.nextElement() + " "); } }
Выход:
Сортировать вектор
Вы также можете сортировать вектор в соответствии с определенным порядком. Для сортировки вектора необходимо использовать метод Collections.sort () из Java Collections Framework.
В следующем примере показана сортировка векторов.
import java.util.*; public class Main { public static void main(String arg[]) { //Создаем пустой вектор Vector oddVector = new Vector(); //Добавляем элементы в вектор oddVector.add(1); oddVector.add(11); oddVector.add(7); oddVector.add(3); oddVector.add(5); //печатаем элементы вектора System.out.println("Элементы вектора: "+oddVector); //сортируем вектор методом Collections.sortCollections.sort(oddVector); //печатаем отсортированный вектор System.out.println("Элементы вектора после сортировки: "+oddVector); } }
Выход:
Приведенная выше программа создает Вектор нечетных чисел. Затем с помощью метода Collections.sort() Вектор сортируется.
2D (двумерный) вектор
Двумерный вектор - это вектор, каждый из элементов которого является вектором. Его также можно назвать "вектором векторов".
Приведенный ниже пример демонстрирует 2d-вектор.
import java.util.*; public class Main { public static void main(String args[]) { //определить и инициализировать вектор Vector inner_vec = new Vector(); inner_vec.add("Software"); inner_vec.add("Testing"); inner_vec.add("Java"); inner_vec.add("Tutorials"); //определить другой вектор и добавить к нему первый вектор. Vector outer_vec = new Vector(); outer_vec.add(inner_vec); String str; //вывести содержимое вектора на экран.вектор векторов System.out.println("Содержание вектора векторов:"); for(int i=0;iВыход:
В приведенной выше программе у нас есть вектор из четырех элементов. Затем мы объявляем другой вектор и добавляем предыдущий вектор в качестве элемента ко второму вектору. Обратите внимание на способ доступа к элементам вектора. Формируя цикл for, можно сделать вывод, что первый элемент внешнего вектора (с индексом 0) является первым или внутренним вектором.
Таким образом, в цикле мы сохраняем индекс внешнего вектора равным 0 и проходим по внутреннему вектору, чтобы отобразить все элементы.
Преобразование вектора в массив
Рассмотрим следующий пример преобразования вектора в массив. Чтобы преобразовать вектор в массив, мы используем метод 'toArray' класса Vector.
В следующем примере программирования Мы объявляем строковый вектор Vector и добавляем в него элементы. Затем, используя метод toArray класса Vector, мы преобразуем вектор в строковый массив, передавая в качестве аргумента объект строкового массива.
import java.util.Vector; public class Main { public static void main(String[] args) { // Создаем вектор строковых элементов Vector color_vector = new Vector(); // Добавляем элементы в вектор color_vector.add("Violet"); color_vector.add("Indigo"); color_vector.add("Blue"); color_vector.add("Green"); color_vector.add("Yellow"); color_vector.add("Orange"); color_vector.add("Red"); // Конвертируем вектор вМассив строк с использованием метода toArray String[] colorsArray = color_vector.toArray(new String[color_vector.size()]); //печатаем элементы массива System.out.println("Элементы массива строк :"); for(String val:colorsArray){ System.out.print(val + " "); } } } }Выход:
Вектор против массива
Ниже перечислены некоторые различия между вектором и массивом.
Вектор Массив Вектор является динамическим, его размер увеличивается и уменьшается по мере добавления или удаления элементов. Массивы статичны, и их размер остается фиксированным после объявления. Векторы могут хранить только объекты. Массивы могут хранить как примитивные типы, так и объекты. Он предоставляет метод size() для определения размера. Предоставляет свойство длины для определения длины. Не имеет концептуальных размеров, но может быть создан как вектор векторов, обычно называемый 2-мерным вектором. Массивы поддерживают размерность. Вектор синхронизирован. Массив не синхронизирован. Вектор работает медленнее, чем массив. Массив быстрее. Резервирует дополнительную память при увеличении емкости. Не резервирует дополнительное хранилище. Обеспечивает безопасность типов, поддерживая дженерики. Нет поддержки по общим вопросам. Вектор против списка массивов
В этом разделе рассматривается разница между Vector и ArrayList в Java.
Вектор ArrayList Присутствует с начальной версии Java (версия JDK 1.0). Введена в Java начиная с JDK 1.2 Вектор - это унаследованный класс Java. ArrayList является частью Java Collections Framework. При достижении емкости вектор увеличивается в два раза. ArrayList увеличивается на половину размера, когда достигается его емкость. Векторные методы синхронизированы. ArrayList не синхронизирован. Вектор использует Enumerator и Iterator для обхода. ArrayList использует только итератор. Векторные операции выполняются медленнее. ArrayList быстрее. Вектор имеет размер инкремента, с помощью которого размер вектора может быть увеличен. ArrayList не обеспечивает размер инкремента. Vector является потокобезопасным, что означает, что использование Vector из нескольких потоков разрешено и безопасно. ArrayList не является потокобезопасным. Часто задаваемые вопросы
Вопрос #1) Что такое вектор в Java?
Ответ: В Java вектор можно определить как растущий массив объектов. Подобно массивам, к элементам вектора можно обращаться с помощью индексов.
Вопрос #2) Является ли вектор упорядоченным в Java?
Ответ: Да. Вектор упорядочен и сохраняет порядок вставки элементов.
Вопрос № 3) Является ли вектор потокобезопасным в Java?
Ответ: Да. В Java класс Vector является потокобезопасным. Поскольку класс Vector синхронизирован, это делает его потокобезопасным, т.е. вы можете использовать класс Vector из нескольких потоков, и это будет безопасно.
Вопрос # 4) Почему мы используем вектор в Java?
Ответ: Наиболее важной причиной использования векторов в Java является то, что вектор автоматически увеличивается и уменьшается. Они динамичны, поэтому их предпочитают массивам.
Вопрос # 5) Что лучше - ArrayList или вектор?
Ответ: С точки зрения производительности ArrayList быстрее по сравнению с Vector, поскольку Vector синхронизирован, что делает его медленнее.
Заключение
В этом учебнике мы начали со структуры данных Vector в Java. Векторы почти аналогичны массивам, в которых доступ к элементам вектора осуществляется с помощью привычных индексов. Векторы называются динамическими массивами, и в отличие от массивов, размер вектора увеличивается и уменьшается автоматически.
Векторы также имеют функции емкости и приращения, которые могут быть использованы для создания и резервирования дополнительного хранилища для будущих добавлений. Вектор - это унаследованный класс в пакете java.util языка Java, синхронизированный и потокобезопасный.
Таким образом, мы должны предпочесть векторы, когда нам нужен динамический размер, а также при работе в многопоточной среде.