Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

DeFacto-Standard IT

[Java] List Interface - Vector, ArrayList 본문

Java/Collection

[Java] List Interface - Vector, ArrayList

defacto standard 2017. 10. 3. 19:39

공통점과 차이점

Vector와 ArrayList는 배열의 대용으로서 사용된다.

 

공통점

차이점

List Interface를 구현

저장순서 유지

데이터 중복 허용

저장 공간으로서 배열을 사용

Vector : 멀티 쓰레드에 대한 동기화 지원 O

ArrayList : 멀티 쓰레드에 대한 동기화 지원 X

 

Vector의 경우 멀티쓰레드에 대한 동기화가 지원이 되며

ArrayList의 경우는 동기화가 지원되지 않는다.

 

멀티쓰레드의 동기화 지원의 여부때문에

ArrayList보다 Vector가 나중에 나온 것이라고 생각할 수 있지만, Vector의 동기화 때문에 속도가 느려서 ArrayList가 나온 것이다.

 

 

장단점

장점

단점

데이터를 읽거나 저장할 때 효율이 좋다

용량을 변경할 일이 생긴다면 새로운 배열을 생성하고 복사해야 하므로 효율이 떨어진다.

 

 

데이터 저장

Vector와 ArrayList는 Object배열을 이용하여 순차적으로 저장한다.

배열의 인덱스는 0부터 시작한다.

 

자바에서 한 번 정의된 배열의 저장공간이 꽉 찬 상태에서 추가적인 요소를 넣고 싶은 경우,

사이즈가 더 큰, 새로운 배열을 만들어서 이를 전부 복사하여 값을 넣은 후 추가적으로 값을 넣어야한다.

 

Vector와 ArrayList의 경우 겉에서는 별다른 처리가 없는 것 같지만 내부적으로는 배열을 사용한다.

따라서 엄밀히 말하자면 '배열의 전체 크기를 늘리는 것'이 아니라,

'크기가 큰 배열을 새로 정의 하고, 기존 배열을 복사' 해주는 기능을 지원하는 것 뿐이다.

 

내부 필드로 elementData라는 Object배열이 있어서, 모든 타입의 객체를 담을 수 있다.

접근제어자는 protected로 이를 상속받는 하위 클래스에서 elementData에 접근이 가능하다.

ArrayList선언 시 ArrayList<String>과 같이 Generic을 써서 특정 타입만 받을 수 있어 특정 Class에서 지원하는 메서드 역시 사용이 가능하다.

 

 

정렬

List Interface를 상속받는 Vector와 List는 저장 순서를 유지시킨다.

따라서 이를 정렬을 할 수 있다. Collections라는 클래스의 static method를 사용하면 된다.

Collections.sort()를 사용해서 오름차순 정렬이 가능하며,

Collections.reverse()를 사용해서 내림차순 정렬이 가능하다.

 

Primitive타입이 아닌, 객체를 정렬할 때는 무작정 정렬할 수가 없으므로 정렬의 기준필드가 필요하며 이를 구현할 필요가 있다.

이때 Comparator라는 인터페이스를 사용한다. Comparator Interface와 관련된 글을 참조한다.

 

 

Vector, ArrayList Methods

ArrayList의 경우 removeRange()메서드를 제외하고 모든 메서드는 Vector와 동일하다

Vector의 경우 기존에 작성된 소스코드와 호환성을 유지하면서 List Interface를 구현해야해서 이름만 다르고 같은 기는을 하는 메서드가 많다.

메서드

설명

Vector()

Vector객체를 생성한다. 기본 크기는 10이다.

Vector(Collection c)

Collection c를 저장할 수 있는 Vector객체를 생성

Vector(int initialCapacity)

초기용량이 initialCapacity인 Vector객체를 생성한다.

Vector(int initialCapacity, int capacityIncrement)

초기용량이 initialCapacity이고 용량의 증분값이 capacityIncrement인 Vector객체를 생성한다.

void add(int index, Object o)

index위치에 객체 o 저장

boolean add(Object o)

객체 o를 저장한다. 성공 시 true, 실패 시 false 리턴

boolean addAll(Collection c)

Collection c를 저장한다.

boolean addAll(int index, Collection c)

index위치부터 Collection c를 저장한다.

void addElement(Object o)

객체 o를 저장한다.

int capacity()

Vector에 선언된 배열의 총 용량 반환

void clear()

void removeAllElements()

Vector에 저장된 모든 요소를 삭제

Object clone()

Vector를 복제

boolean contains(Object o)

boolean containsAll(Collection c)

객체 o또는 Collection c가 Vector에 포함되어 있는지 확인

void copyInto(Object[] arr)

저장된 객체들을 Object배열 arr배열에 저장

Object elementAt(int index)

index위치에 저장된 객체 반환

Enumeration elements()

저장된 모든 객체 반환

void ensureCapacity(int minCapacity)

용량이 최소 minCapacity가 되도록 세팅

boolean equals(Object o)

객체 o와 같은지 비교

Object firstElement()

가장 첫 번째에 저장된 객체 반환

Object get(int index)

index위치에 저장된 객체 반환

int hashCode()

해시코드 반환

int indexOf(Object o)

o객체가 저장된 위치 반환

int indexOf(Object o, int index)

o객체가 저장된 위치를 index위치부터 찾아 반환

void insertElementAt(Object o, int index)

객체 o를 index위치에 삽입

boolean isEmpty()

Vector가 비어있는지 확인

Object lastElement()

가장 마지막에 저장된 객체 반환

int lastIdexOf(Object o)

객체 o가 저장된 위치를 끝에서 부터 역방향으로 검색하여 위치 반환

int lastIndexOf(Object o, int index)

객체 o가 저장된 위치를 index위치부터 역방향으로 검색하여 위치 반환

Object remove(int index)

index위치에 있는 객체 제거 후 반환

boolean remove(Object o)

boolean removeElement(Object o)

객체 o제거. 성공 시 true, 실패 시 false 리턴

boolean removeAll(Collection c)

Collection c에 저장되어있는 요소와 동일한 객체를 Vector에서 제거

void removeElementAt(int index)

index위치에 저장된 객체 삭제

boolean retainAll(Collection c)

Vector에 저장된 것 중 Collection c와 동일한 것을 제외하고 모두 삭제

Object set(int index, Object o)

void setElementAt(Object o, int index)

객체 o를 index위치에 삽입

void setSize(int newSize)

Vector의 크기를 newSize크기로 변경

int size()

현재 저장된 객체의 갯수 반환

List subList(int fromIndex, int toIndex)

fromIndex부터 toIndex까지 저장된 객체를 서브리스트로 반환

Object[] toArray()

저장된 모든 객체를 배열로 반환

Obejct[] toArray(Object[] arr)

저장된 모든 객체를 배열 arr에 담아 반환

String toString()

저장된 모든 객체를 문자열로 출력

void trimToSize()

용량을 크기에 맞게 줄여 빈 공간을 제거

 

Object remove(int index)

index위치에 있는 객체를 삭제하고, 삭제한 객체를 반환한다.

중간에 있는 객체가 삭제된다면, 바로 다음 객체를 복사하여 삭제할 객체를 덮어쓰는 방식으로 처리된다.

계속 삭제를 하다가 마지막 객체를 삭제할 때는 그냥 null을 할당한다.

내부적으로 System.arraycopy()를 사용한다.

이는, 삭제할 위치의 객체 이후에 복사, 삭제할 객체가 많을수록 작업시간이 오래걸린다는 것을 의미한다.

 

 

Java API소소는

JDK설치폴더\src.zip\java\util\Vector.java에 존재한다.

 

 

'Java > Collection' 카테고리의 다른 글

Collection Sheet & Selection  (0) 2017.11.17
[Java] List Interface  (0) 2017.10.03
[Java] Collection Interface  (0) 2017.10.03
Comments