본문 바로가기
백엔드

[Java] Collection - 2. ArrayList와 Vector

by BeforB 2022. 7. 6.
728x90

 

1. ArrayList 

    1) 특징  

    2) 생성자 

2. Vector 

    1) 특징  

    2) 생성자 

 

 

 

* 아래 링크를 참고하여 번역 및 추가 정리 하였습니다.

https://www.geeksforgeeks.org/collections-in-java-2/

https://www.geeksforgeeks.org/java-util-vector-class-java/

 

Vector Class in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

 

 

 

 

 

 

1. ArrayList

ArrayList는 Java의 Collection 프레임워크 중 하나로,   java.util 패키지에 존재한다. 동적인 배열을 지원하며 표준 배열보다 느리지만 array의 원소 추가/삭제 등 조작이 많이 필요하는 경우 유용하게 사용된다.

 

1) 특징

  • ArrayList는 AbstractList 클래스를 상속받고 List인터페이스를 구현한다.
  • ArrayList는 처음에 크기가 지정되어 있지만 collection에서 객체를 추가/삭제 함에 따라 크기가 자동으로 증가/감소한다.
  • 리스트의 원소에 랜덤하게 접근할 수 있다.
  • ArrayList는 int, char과 같은 primitive type을 사용할 수 없으며 Integer, Character과 같은 wrapper class를 사용해야 한다.
  • C++에서의 Vector와 비슷하다.
  • ArrayList는 동기화되어 있지 않다. Java에서 동기화된 collection은 Vector이다.
// ArrayList
public class ArrayList<E> extends AbstractList<E>
		implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
	
}

 

 

 

 

2) 생성자(Constructors)

1. ArrayList()

기본 생성자는 비어있는 ArrayList를 생성한다.

ArrayList arr = new ArrayList();

// 예시
ArrayList<Integer> arr = new ArrayList<Integer>();

 

 

2. ArrayList(Collection c)

ArrayList를 Collection c의 원소들로 초기화한다. 이미 존재하는 Collection c의 원소들을 포함시키고 싶을 경우 사용할 수 있다.

ArrayList arr = new ArrayList(c);

// 예시
Set<Integer> set = new HashSet<>();
set.add(10);
set.add(29);
List<Integer> list1 = new ArrayList<>(set); // 초기화
set.add(17);
List<Integer> list2 = new ArrayList<>(set); // 초기화

System.out.println(set.toString());  // 17, 10, 29
System.out.println(list1.toString()); // 10, 29
System.out.println(list2.toString()); // 17, 10, 29

 

 

2. ArrayList(int capacity)

초기 사이즈가 지정된 ArrayList를 생성하기 위해 사용된다.

ArrayList arr = new ArrayList(N);

 

 

 

 

3. Vector

Vector 클래스는  java.util패키지에 속해있고, List 인터페이스를 구현했기 때문에 List 인터페이스에 있는 모든 메소드들을 사용가능하다. 원래는 레거시 클래스였지만 현재는 자바의 collection과 모두 호환가능하다.

 

1) 특징

  • ArrayList와 매우 흡사하지만 Vector는 collection에 속하지 않는 몇몇 레거시 메서드들의 경우 동기화되어 있다.
  • 동기화 되어있기 때문에 non-thread 환경에서는 잘 사용되지 않으며 추가,검색,삭제,수정 등의 이벤트 속도가 느리다.
  • 동시에 수정될 경우 ConcurrentModificationException이 발생한다.
  • 벡터 용량 증가
    • increment가 정해지지 않을 경우, vector는 각 할당 주기에서 두 배씩 증가한다.

 

 

2) 생성자

Vector의 생성자들

 

2-1) new Vector()

자바에서 설정된 기본 세팅으로 벡터가 생성된다. initialCapacity는 10으로 설정되고, capacityIncrement는 0으로 설정된다.

  • initialCapacity
    • 벡터의 초기 용량(default : 10)
    • 0보다 작게 설정될 경우 IllegalArgumentException이 발생된다.
  • capacityIncrement
    • element가 추가되어 벡터의 capacity를 채웠을 때 늘어나게되는 크기(default : 0)
    • capacityIncrement가 0 이하일 경우 현재 capacity의 두 배로 증가된다.

 

 

2-2) new Vector(Collection c)

ArrayList와 마찬가지로 기존에 있는 Collection의 원소들을 포함시키고 싶을 때 사용할 수 있는 방법이다.

List<String> list = new ArrayList<String>();
list.add("Apeach");
list.add("Ryan");
list.add("Muzi");
System.out.println(list.toString());

Vector<String> vector = new Vector<String>(list);
vector.add("Frodo");
System.out.println(vector.toString());

 

실제로 내부구현은 아래와 같이 되어있으며 Arrays.copyOf 메서드를 이용하여 입력받은 collection 파라미터를 복사한다. collection이 null일 경우 NullPointerException이 발생한다.

 

 

 

2-3) new Vector(int initialCapacity)

Vector의 초기 용량(initialCapacity)을 설정한다.

initialCapacity가 0보다 작게 설정될 경우 IllegalArgumentException이 발생된다.

Vector<Integer> vector = new Vector<>(7);
System.out.println(vector.size());     // 0 -> element 개수
System.out.println(vector.capacity()); // 7 -> 실제 할당된 용량

 

 

2-4) new Vector(int initialCapacity, int capacityIncrement)

초기 용량(initialCapacity)와 증가용량(capacityIncrement)를 설정한다. capacityIncrement를 따로 지정해주지 않은 생성자(1, 2, 3)에서는 기본값이 0으로 설정되며, capacityIncrement가 0 이하로 설정될 경우 vector의 element가 수용가능한 capacity만큼 차게되면 현재 용량의 두 배로 증가된다.

 

 

 

 

 

 

728x90

댓글