Java for Beginner
675 subscribers
558 photos
156 videos
12 files
851 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Vector, отличия от ArrayList

Vector — это класс из пакета java.util, который реализует интерфейсы List, RandomAccess, Cloneable и Serializable. Этот класс предоставляет возможность создания динамически изменяемых массивов, которые могут автоматически увеличивать свой размер.

В отличие от ArrayList, класс Vector является синхронизированным, что делает его безопасным для использования в многопоточной среде без необходимости в дополнительной синхронизации.

История и использование

Vector был введен в первых версиях Java и являлся основным динамическим массивом до появления ArrayList в Java 2 (JDK 1.2). С тех пор, ArrayList стал более предпочтительным выбором для однопоточных приложений благодаря своей более высокой производительности.

Отличия от ArrayList

Синхронизация:
Vector: Все методы класса синхронизированы, что делает его потокобезопасным. Это приводит к некоторому снижению производительности при выполнении операций.
ArrayList: Не синхронизирован. Если требуется потокобезопасность, нужно вручную синхронизировать методы или использовать внешние блокировки.

Увеличение емкости:
Vector: По умолчанию удваивает свой размер при переполнении, что может привести к резкому увеличению памяти.
ArrayList: Увеличивает свою емкость на 50% при необходимости, что делает его более гибким в плане использования памяти.


Методы добавления и удаления элементов:
Оба класса имеют схожие методы для добавления, удаления и доступа к элементам. Однако из-за синхронизации, методы
Vector несколько медленнее.

Пример использования Vector
import java.util.Vector;

public class VectorExample {
public static void main(String[] args) {
// Создание вектора с начальной емкостью 10
Vector<String> vector = new Vector<>(10);

// Добавление элементов
vector.add("Element 1");
vector.add("Element 2");
vector.add("Element 3");

// Чтение элементов
System.out.println("Element at index 1: " + vector.get(1));

// Удаление элемента
vector.remove(2);

// Итерация по элементам
for (String element : vector) {
System.out.println("Element: " + element);
}
}
}


Когда использовать Vector

Используйте Vector, когда требуется потокобезопасная коллекция с динамическим изменением размера и когда методы будут вызываться из нескольких потоков одновременно.
Если потокобезопасность не требуется, предпочтение лучше отдать ArrayList, так как он имеет лучшую производительность благодаря отсутствию синхронизации.


Ссылки на полезные статьи (спасибо авторам за проделанную работу) :
https://www.baeldung.com/java-vector-guide
https://proglang.su/java/vector-class

#Java #Training #Medium #Vector
Внутреннее устройство и основные методы Vector

Как и ArrayList, Vector основан на массиве, который динамически изменяет свой размер. Основные особенности внутреннего устройства Vector включают:

Массив для хранения данных:
Внутренне Vector использует массив Object[] elementData для хранения элементов.
Поле size хранит количество элементов в векторе.

Синхронизация:
Все методы класса синхронизированы, что обеспечивает потокобезопасность.

Управление емкостью:
При создании Vector можно задать начальную емкость и коэффициент увеличения (capacityIncrement). Если коэффициент не задан, то при переполнении емкость вектора удваивается.

Основные методы Vector

Конструкторы:
Vector(): Создает пустой вектор с начальной емкостью 10.
Vector(int initialCapacity): Создает пустой вектор с указанной начальной емкостью.
Vector(int initialCapacity, int capacityIncrement): Создает пустой вектор с указанной начальной емкостью и коэффициентом увеличения.
Vector(Collection<? extends E> c): Создает вектор, содержащий элементы указанной коллекции.

Методы добавления элементов:

boolean add(E e): Добавляет элемент в конец вектора.
Vector<String> vector = new Vector<>();
vector.add("Element 1");


void add(int index, E element): Вставляет элемент в указанную позицию, сдвигая элементы вправо.
vector.add(1, "Element 2");


Методы доступа к элементам:

E get(int index): Возвращает элемент, находящийся в указанной позиции.
String element = vector.get(0);


int size(): Возвращает количество элементов в векторе.
int size = vector.size();


Методы удаления элементов:

boolean remove(Object o): Удаляет первое вхождение указанного элемента.
vector.remove("Element 1");


E remove(int index): Удаляет элемент в указанной позиции и возвращает его.
vector.remove(0);


Итерация по элементам:

Enumeration<E> elements(): Возвращает объект Enumeration для перебора элементов вектора.
Enumeration<String> enumeration = vector.elements();
while (enumeration.hasMoreElements()) {
System.out.println("Element: " + enumeration.nextElement());
}


Iterator<E> iterator(): Возвращает объект Iterator для перебора элементов вектора.

Iterator<String> iterator = vector.iterator();
while (iterator.hasNext()) {
System.out.println("Element: " + iterator.next());
}


Преимущества и недостатки Vector

Преимущества:

Потокобезопасность: Синхронизация методов делает
Vector безопасным для использования в многопоточной среде.
Динамическое изменение размера: Вектор автоматически увеличивает свою емкость при добавлении новых элементов.


Недостатки:
Низкая производительность: Из-за синхронизации методов производительность
Vector может быть ниже, чем у ArrayList.
Высокие накладные расходы: При частых операциях добавления или удаления элементов синхронизация и увеличение емкости могут создавать дополнительные накладные расходы.


#Java #Training #Medium #Vector