logo

Java의 벡터 클래스

Vector 클래스는 확장 가능한 객체 배열을 구현합니다. 벡터는 레거시 클래스에 속하지만 이제는 컬렉션과 완벽하게 호환됩니다. 그것은에서 발견된다 java.util 패키지 그리고 구현 목록 인터페이스이므로 아래와 같이 List 인터페이스의 모든 메소드를 사용할 수 있습니다.

Java의 벡터 클래스

  • 벡터는 필요에 따라 확장하거나 축소할 수 있는 동적 배열을 구현합니다. 배열과 마찬가지로 정수 인덱스를 사용하여 액세스할 수 있는 구성 요소를 포함합니다.
  • 그들은 다음과 매우 유사합니다 배열목록 , 그러나 Vector는 동기화되며 컬렉션 프레임워크에 포함되지 않은 일부 레거시 메서드를 가지고 있습니다.
  • 또한 ArrayList와 같은 삽입 순서를 유지합니다. 그래도 스레드가 아닌 환경에서는 그대로 사용되는 경우가 거의 없습니다. 동기화됨 , 이로 인해 해당 요소의 추가, 검색, 삭제 및 업데이트 성능이 저하됩니다.
  • Vector 클래스에서 반환된 Iterator는 오류가 발생하지 않습니다. 동시 수정의 경우 실패하고 ConcurrentModificationException.

통사론:



public class Vector extends AbstractList implements List, RandomAccess, Cloneable, Serializable>

여기, 그리고 요소의 유형입니다.

  • 확장됩니다 추상목록 그리고 구현 목록 인터페이스.
  • Serialized, Cloneable, Iterable, Collection, List, RandomAccess 인터페이스를 구현합니다.
  • 직접적으로 알려진 하위 클래스는 다음과 같습니다. 스택 .

벡터 용량 증가에 관한 중요한 사항은 다음과 같습니다.

증분을 지정하면 Vector는 각 할당 주기에 따라 증분을 확장합니다. 그러나 증분을 지정하지 않으면 각 할당 주기마다 벡터의 용량이 두 배가 됩니다. 벡터는 세 가지 보호된 데이터 멤버를 정의합니다.

  • 정수 용량증분: 증분 값을 포함합니다.
  • 정수 요소 개수: 현재 벡터에 저장된 요소 수입니다.
  • 객체 요소데이터[]: 벡터를 보유하는 배열이 저장됩니다.

벡터 선언의 일반적인 오류는 다음과 같습니다. 다음 :

  • 벡터는 IllegalArgumentException 정의된 벡터의 초기 크기가 음수인 경우.
  • 지정된 컬렉션이 null이면 NullPointer예외 .

생성자

1. 벡터(): 초기 용량이 10인 기본 벡터를 생성합니다.

Vector v = new Vector();>

2. 벡터(정수 크기): 초기 용량이 크기로 지정되는 벡터를 생성합니다.

Vector v = new Vector(int size);>

3. 벡터(정수 크기, 정수 증분): 초기 용량이 크기로 지정되고 증분이 incr로 지정되는 벡터를 생성합니다. 벡터의 크기가 위쪽으로 조정될 때마다 할당할 요소 수를 지정합니다.

크루스칼 알고리즘'
Vector v = new Vector(int size, int incr);>

4. 벡터(컬렉션 c): 컬렉션 c의 요소를 포함하는 벡터를 만듭니다.

Vector v = new Vector(Collection c);>

벡터 클래스의 메서드

방법

설명

네트워크와 인터넷
추가(그리고) 지정된 요소를 이 Vector의 끝에 추가합니다.
add(int 인덱스, E 요소) 이 Vector의 지정된 위치에 지정된 요소를 삽입합니다.

addAll(컬렉션

확장 E> c)

지정된 Collection의 Iterator에서 반환된 순서대로 지정된 Collection의 모든 요소를 ​​이 Vector의 끝에 추가합니다.

addAll(int 인덱스,

컬렉션 다)

지정된 Collection의 모든 요소를 ​​지정된 위치에 있는 이 Vector에 삽입합니다.
addElement(E obj) 지정된 구성요소를 이 벡터의 끝에 추가하여 크기를 1씩 늘립니다.
용량() 이 벡터의 현재 용량을 반환합니다.
분명한() 이 Vector에서 모든 요소를 ​​제거합니다.
클론() 이 벡터의 복제본을 반환합니다.
포함(객체 o) 이 벡터에 지정된 요소가 포함되어 있으면 true를 반환합니다.
containAll(컬렉션 c) 이 Vector에 지정된 Collection의 모든 요소가 포함되어 있으면 true를 반환합니다.
copyInto(객체 [ ] anArray ) 이 벡터의 구성 요소를 지정된 배열에 복사합니다.
요소At(int 인덱스) 지정된 인덱스에 있는 구성 요소를 반환합니다.
강요() 이 벡터의 구성요소에 대한 열거를 반환합니다.
verifyCapacity(int minCapacity) 필요한 경우 이 벡터의 용량을 늘려 최소 용량 인수에 지정된 구성요소 수 이상을 보유할 수 있도록 합니다.
같음(객체 o) 지정된 객체가 이 Vector와 동일한지 비교합니다.
첫 번째 요소() 이 벡터의 첫 번째 구성요소(인덱스 0에 있는 항목)를 반환합니다.

forEach(소비자

슈퍼E>액션)

모든 요소가 처리되거나 작업에서 예외가 발생할 때까지 Iterable의 각 요소에 대해 지정된 작업을 수행합니다.
get(정수 인덱스) 이 Vector의 지정된 위치에 있는 요소를 반환합니다.
해시 코드() 이 Vector의 해시 코드 값을 반환합니다.
indexOf(객체 o)

이 벡터에서 지정된 요소가 처음으로 나타나는 인덱스를 반환합니다.

또는 이 벡터에 요소가 포함되어 있지 않으면 -1입니다.

indexOf(객체 o, int index) 이 벡터에서 지정된 요소가 처음으로 나타나는 인덱스를 반환하고 인덱스에서 앞으로 검색하거나 요소를 찾을 수 없으면 -1을 반환합니다.
insertElementAt(E obj, int index) 지정된 개체를 지정된 인덱스에 있는 이 벡터의 구성 요소로 삽입합니다.
비었다() 이 벡터에 구성요소가 없는지 테스트합니다.
반복자() 이 목록의 요소에 대한 반복자를 적절한 순서로 반환합니다.
마지막요소() 벡터의 마지막 구성요소를 반환합니다.
lastIndexOf(객체 o)

이 벡터에서 지정된 요소가 마지막으로 나타나는 인덱스를 반환합니다.

또는 이 벡터에 요소가 포함되어 있지 않으면 -1입니다.

lastIndexOf(Object o, int index) 이 벡터에서 지정된 요소가 마지막으로 나타나는 인덱스를 반환하고 인덱스에서 거꾸로 검색하거나 요소를 찾을 수 없으면 -1을 반환합니다.
목록반복자() 이 목록의 요소에 대한 목록 반복자를 (적절한 순서로) 반환합니다.
listIterator(int 인덱스)

이 목록의 요소에 대한 목록 반복자를 (적절한 순서로) 반환합니다.

목록의 지정된 위치에서 시작합니다.

windows.open 자바스크립트
제거(int 인덱스) 이 Vector의 지정된 위치에 있는 요소를 제거합니다.
제거(객체 o) 이 Vector에서 지정된 요소의 첫 번째 항목을 제거합니다. Vector에 요소가 포함되어 있지 않으면 변경되지 않습니다.
RemoveAll(컬렉션 c) 지정된 Collection에 포함된 모든 요소를 ​​이 Vector에서 제거합니다.
제거모든요소() 이 벡터에서 모든 구성 요소를 제거하고 크기를 0으로 설정합니다.
RemoveElement(객체 객체) 이 벡터에서 인수의 첫 번째(인덱스가 가장 낮은) 항목을 제거합니다.
RemoveElementAt(int 인덱스) 지정된 인덱스의 구성 요소를 삭제합니다.
RemoveIf(조건자 필터) 주어진 조건을 만족하는 이 컬렉션의 모든 요소를 ​​제거합니다.

RemoveRange(int fromIndex,

int toIndex)

이 목록에서 인덱스가 fromIndex(포함)와 toIndex(제외) 사이에 있는 모든 요소를 ​​제거합니다.
replacementAll(단항 연산자 연산자)이 목록의 각 요소를 해당 요소에 연산자를 적용한 결과로 바꿉니다.
keepAll(컬렉션 c) 지정된 컬렉션에 포함된 이 Vector의 요소만 유지합니다.
set(int 인덱스, E 요소) 이 Vector의 지정된 위치에 있는 요소를 지정된 요소로 바꿉니다.
setElementAt(E obj, int index) 이 벡터의 지정된 인덱스에 있는 구성요소를 지정된 객체로 설정합니다.
setSize(int newSize) 이 벡터의 크기를 설정합니다.
크기() 이 벡터의 구성요소 수를 반환합니다.
sort(비교기 c) 지정된 비교기에 의해 유도된 순서에 따라 이 목록을 정렬합니다.
분할기() 이 목록의 요소에 대해 지연 바인딩 및 빠른 실패 Spliterator를 만듭니다.
subList(int fromIndex, int toIndex) fromIndex(포함)와 toIndex(제외) 사이의 이 목록 부분에 대한 뷰를 반환합니다.
toArray() 이 Vector의 모든 요소를 ​​올바른 순서로 포함하는 배열을 반환합니다.
toArray(T[] a) 이 Vector의 모든 요소를 ​​올바른 순서로 포함하는 배열을 반환합니다. 반환된 배열의 런타임 유형은 지정된 배열의 런타임 유형입니다.
toString() 각 요소의 문자열 표현을 포함하는 이 Vector의 문자열 표현을 반환합니다.
트림투사이즈() 이 벡터의 용량을 벡터의 현재 크기로 자릅니다.

이 클래스의 메서드를 살펴보기 전에 먼저 Vector를 만들고 사용하는 방법을 논의하고 구현해 보겠습니다.

예:

자바
// Java Program to Demonstrate Working of Vector // Via Creating and Using It // Importing required classes import java.io.*; import java.util.*; // Main class class GFG { // Main driver method public static void main(String[] args) { // Size of the Vector int n = 5; // Declaring the Vector with // initial size n Vector v = 새 벡터 (N); // 벡터의 끝에 // 새 요소 추가 for (int i = 1; i<= n; i++) v.add(i); // Printing elements System.out.println(v); // Remove element at index 3 v.remove(3); // Displaying the vector // after deletion System.out.println(v); // iterating over vector elements // using for loop for (int i = 0; i < v.size(); i++) // Printing elements one by one System.out.print(v.get(i) + ' '); } }>

산출
[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>

메모:

  • 벡터 증분을 지정하지 않으면 증분 주기마다 용량이 두 배가 됩니다.
  • 벡터의 용량은 크기보다 작을 수 없으며 그와 같을 수도 있습니다.

Java의 벡터 클래스에서 다양한 작업 수행

다음과 같이 Vector 클래스에 대한 다양한 작업을 논의해 보겠습니다.

자바 대 C++
  1. 요소 추가
  2. 요소 업데이트
  3. 요소 제거
  4. 요소 반복

작업 1: 요소 추가

Vector에 요소를 추가하기 위해 다음을 사용합니다. 추가하다() 방법. 이 메서드는 다양한 매개변수를 기반으로 여러 작업을 수행하도록 오버로드됩니다. 그들은 다음과 같이 나열됩니다:

  • 추가(객체): 이 메소드는 Vector의 끝에 요소를 추가하는 데 사용됩니다.
  • 추가(int 인덱스, 개체): 이 메서드는 Vector의 특정 인덱스에 요소를 추가하는 데 사용됩니다.

예:

자바
// Java Program to Add Elements in Vector Class // Importing required classes import java.io.*; import java.util.*; // Main class // AddElementsToVector class GFG { // Main driver method public static void main(String[] arg) { // Case 1 // Creating a default vector Vector v1 = new Vector(); // Adding custom elements // using add() method v1.add(1); v1.add(2); v1.add('geeks'); v1.add('forGeeks'); v1.add(3); // Printing the vector elements to the console System.out.println('Vector v1 is ' + v1); // Case 2 // Creating generic vector Vector v2 = 새 벡터 (); // 사용자 정의 요소 추가 // add() 메소드 사용 v2.add(1); v2.add(2); v2.add(3); // 벡터 요소를 콘솔에 인쇄 System.out.println('Vector v2 is ' + v2); } }>

산출:


Vector v1 is [1, 2, geeks, forGeeks, 3] Vector v2 is [1, 2, 3]>

작업 2: 요소 업데이트

요소를 추가한 후 요소를 변경하려면 다음을 사용하여 수행할 수 있습니다. 세트() 방법. Vector는 인덱스가 지정되어 있으므로 변경하려는 요소는 해당 요소의 인덱스로 참조됩니다. 따라서 이 메서드는 인덱스와 업데이트된 요소를 해당 인덱스에 삽입합니다.

자바
// Java code to change the // elements in vector class import java.util.*; // Driver Class public class UpdatingVector { // Main Function public static void main(String args[]) { // Creating an empty Vector Vector vec_tor = 새로운 벡터 (); // add() 메소드를 사용하여 벡터에 요소를 추가합니다. vec_tor.add(12); vec_tor.add(23); vec_tor.add(22); vec_tor.add(10); vec_tor.add(20); // 벡터 표시 System.out.println('Vector: ' + vec_tor); // set() 메소드를 사용하여 12를 21로 대체 System.out.println('대체되는 객체는 다음과 같습니다: ' + vec_tor.set(0, 21)); // set() 메소드를 사용하여 20을 50으로 대체 System.out.println('대체되는 객체는 다음과 같습니다: ' + vec_tor.set(4, 50)); // 수정된 벡터 표시 System.out.println('새 벡터는:' + vec_tor); } }>

산출
Vector: [12, 23, 22, 10, 20] The Object that is replaced is: 12 The Object that is replaced is: 20 The new Vector is:[21, 23, 22, 10, 50]>

작업 3: 요소 제거

Vector에서 요소를 제거하려면 다음을 사용할 수 있습니다. 제거하다() 방법. 이 메서드는 다양한 매개변수를 기반으로 여러 작업을 수행하도록 오버로드됩니다. 그들은:

  • 제거(개체): 이 메서드는 Vector에서 객체를 제거하는 데 사용됩니다. 그러한 객체가 여러 개 있는 경우 해당 객체의 첫 번째 발생이 제거됩니다.
  • 제거(정수 인덱스): Vector는 인덱싱되므로 이 메서드는 Vector의 특정 인덱스에 있는 요소를 단순히 제거하는 정수 값을 사용합니다. 요소를 제거한 후에는 모든 요소가 왼쪽으로 이동하여 공간을 채우고 개체의 인덱스가 업데이트됩니다.

자바
// Java code illustrating the removal // of elements from vector import java.util.*; import java.io.*; class RemovingElementsFromVector { public static void main(String[] arg) { // Create default vector of capacity 10 Vector v = new Vector(); // Add elements using add() method v.add(1); v.add(2); v.add('Geeks'); v.add('forGeeks'); v.add(4); // Removing first occurrence element at 1 v.remove(1); // Checking vector System.out.println('after removal: ' + v); } }>

산출:

after removal: [1, Geeks, forGeeks, 4]>

작업 4: 벡터 반복

벡터를 반복하는 방법에는 여러 가지가 있습니다. 가장 유명한 방법은 기본 for 루프를 얻다() 특정 인덱스의 요소를 가져오는 메서드와 루프에 대한 고급 .

자바
// Java program to iterate the elements // in a Vector import java.util.*; public class IteratingVector { public static void main(String args[]) { // create an instance of vector Vectorv = 새로운 벡터(); // add() 메소드를 사용하여 요소 추가 v.add('Geeks'); v.add('긱스'); v.add(1, 'For'); // Get 메서드와 // for 루프 사용 for (int i = 0; i< v.size(); i++) { System.out.print(v.get(i) + ' '); } System.out.println(); // Using the for each loop for (String str : v) System.out.print(str + ' '); } }>

산출
Geeks For Geeks Geeks For Geeks>

메모: 다음 내용을 읽어보세요. Java의 ArrayList와 Vector 클래스 더 잘 파악하기 위해서입니다.

Java에서 Vector 클래스는 Java 컬렉션 프레임워크의 일부이며 List 인터페이스의 동적 배열 구현을 제공합니다. 이는 Java(Java 1.0)의 원래 릴리스에 추가되었으며 요소 추가, 삽입 및 제거를 포함하여 벡터 요소를 조작하기 위한 다양한 메소드를 제공합니다.

자바 난수 생성기

다음은 Java에서 벡터를 사용하는 방법을 보여주는 간단한 예입니다.

자바
import java.util.Vector; public class VectorExample { public static void main(String[] args) { // Create a new vector Vector v = 새로운 벡터(3, 2); // 벡터에 요소를 추가합니다. v.addElement(1); v.addElement(2); v.addElement(3); // 인덱스 1에 요소를 삽입합니다. v.insertElementAt(0, 1); // 인덱스 2의 요소를 제거합니다. v.removeElementAt(2); // 벡터의 요소를 인쇄합니다. for (int i : v) { System.out.println(i); } } }>

산출
1 0 3>

Vector 클래스는 동기화됩니다. 즉, 여러 스레드가 문제를 일으키지 않고 동일한 벡터에 액세스할 수 있다는 의미입니다. 그러나 이러한 동기화는 성능 저하를 초래하므로 여러 스레드 간에 벡터를 공유할 필요가 없다면 일반적으로 동기화되지 않은 ArrayList와 같은 대체 클래스를 사용하는 것이 좋습니다.

Java에서 Vector를 사용하면 다음과 같은 이점이 있습니다.

  1. 동기화: 앞서 언급했듯이 Vector는 동기화되므로 멀티 스레드 환경에서 안전하게 사용할 수 있습니다.
  2. 동적 크기: 벡터의 크기는 요소가 추가되거나 제거됨에 따라 동적으로 늘어나거나 줄어들 수 있으므로 모든 요소를 ​​수용할 초기 크기 설정에 대해 걱정할 필요가 없습니다.
  3. 레거시 지원: Vector는 처음부터 Java의 일부였으며 여전히 지원되므로 Vector를 사용하는 이전 Java 코드로 작업해야 하는 경우 좋은 옵션입니다.

Java에서 벡터를 사용할 때의 단점:

  1. 성능: Vector의 동기화는 ArrayList와 같은 다른 컬렉션 클래스에 비해 성능이 저하될 수 있습니다.
  2. 레거시 코드: Vector는 계속 지원되지만 최신 Java 코드는 최신 컬렉션 클래스를 사용하여 작성되는 경우가 많으므로 Vector에 대한 예제와 지원을 찾는 것이 더 어려울 수 있습니다.
  3. 불필요한 오버헤드: Vector의 동기화 기능이 필요하지 않은 경우 이를 사용하면 코드에 불필요한 오버헤드가 추가됩니다.

참고 도서

Java Collections Framework 및 Vector에 대해 학습하기 위한 좋은 참고서는 Naftalin과 Wadler가 쓴 Java Collections입니다. 이 책에서는 Vector를 포함한 Java 컬렉션 프레임워크에 대한 포괄적인 내용을 제공하고 이러한 클래스를 효과적으로 사용하는 방법을 이해하는 데 도움이 되는 많은 예제와 연습이 포함되어 있습니다.