hayu's 개발 일지

99클럽 코테 스터디 3일차 TIL + Vector 본문

자료구조&알고리즘

99클럽 코테 스터디 3일차 TIL + Vector

hayu00 2024. 5. 23. 21:31

학습 키워드

- Vector

 

공부한 내용

Vector

  • Vector은 ArrayList와 같이 List 인터페이스를 상속받는 컬렉션 프레임워크이며, 사용법은 ArrayList와 크게 다르지 않다.
  • ArrayList와 동일한 구조를 가지며 배열의 크기가 늘어나고, 줄어듬에 따라서 자동으로 크기가 조절이 된다.
  • Vector의 특이한 점이라면 항상 동기화되어있고 Collection 프레임워크에 없는 메서드들을 사용이 가능하다.

⇒ 멀티 스레드가 동시에 이 메서드를 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드들이 실행할 수 있다. 그래서 멀티 스레드 환경에서 안정하게 객체를 추가하고 삭제할 수 있다.

  • 하지만 동기화라는 특징이 있어 스레드가 아닌 환경에서는 거의 사용이 되지 않는다. 그리고 항상 동기화되므로 스레드 환경에서의 안정성은 높지만 ArrayList와 비교하여 추가, 검색, 삭제의 성능은 떨어지는 단점이 있다. (스레드가 1개일 때도 동기화를 한다.)

Vector 사용(메서드)

  • Vector 컬렉션의 메서드 구성은 ArrayList와 거의 같다.

Vector 생성

  • Vector 컬렉션의 구조는 ArrayList나 LinkedList와 별반 다르지 않다.
// 타입설정 int타입만 사용가능
Vector<Integer> num = new Vector<>();

// 초기 용량(capacity) 지정
Vector<String> v2 = new Vector<>(10);

// 초기값 지정
Vector<Integer> v3 = new Vector<>(Arrays.asList(1,2,3));

Vector 요소 추가 & 삽입

Vector<Integer> vector = new Vector<Integer>();


        vector.add(3);
        vector.add(2);
        vector.add(-1);
// 인덱스 2 위치에 값 4 삽입한다. (삽입하기 위해 옆의 요소들은 뒤로 이동한다.)
        vector.add(1, 4);

Vector 요소 삭제

Vector<Integer> v = new Vector<Integer>();
v.add(5);
v.add(100);
v.add(-1);

v.remove(1);  // 100 삭제

System.out.println(v); // [5, -1]
  • 여기서 ArrayList와 다른 메서드가 보이는데 removeAllElements() 는 clear() 메서드와 달이 모든 요소를 지우고 용량(capacity)도 0으로 만든다.
// 모든 값 제거
v.clear(); // 요소만 제거한다.
v.removeAllElements(); // 요소도 제거하고 용량도 0으로 만든다.

Vector 용량 & 크기 구하기

  • capacity() 메서드를 통해 컬렉션의 용량을 반환받을 수 있다. (ArrayList에서는 불가능)
   // Vector 초기 용량 10으로 생성
        Vector<Integer> v1 = new Vector<>(10);


        v1.add(1);
        v1.add(2);

// Vector 자료 총 개수(size) 
        System.out.println(v1.size()); // 2

// Vector 용량 
        System.out.println(v1.capacity()); // 10

Vector 요소 출력

  • Vector에서 값을 출력하는 방법도 역시 ArrayList와 동일하다. 마찬가지로 Collection 인터페이스를 상속하기 때문에 Iterator도 사용이 가능하다.
Vector<Integer> list = new Vector<Integer>(Arrays.asList(1,2,3));

// 0번째 index 출력
        System.out.println(list.get(0));

// for문을 통한 전체 요소 출력
        for(Integer i : list) {
            System.out.println(i);
        }

// Iterator를 통한 전체 요소 출력 
        Iterator iter = list.iterator();
        while(iter.hasNext()){
            System.out.println(iter.next()); // 값 출력

 

회고

 

알게된 내용

- Vector가 ArrayList와 매우 비슷하다는 점을 알게 되었고, 다른점은 스레드 동기화라는 부분을 알게 되었다.

 

추후 학습할 내용

- 백터에서 주의할점은 스레드 동기화인데 스레드에 대한 공부가 부족하다는 것을 알게 되었다. 스레드에 대해 공부해야겠다.

 

 

참고 자료

- https://inpa.tistory.com/entry/JAVA-%E2%98%95-Vector-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%8F%99%EA%B8%B0%ED%99%94-%EB%AC%B8%EC%A0%9C%EC%A0%90-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0

- https://crazykim2.tistory.com/570#google_vignette