List 컬렉션
이전 포스팅에서 설명하였 듯이 List 컬렉션은 인덱스 순서로 저장이 되며, 중복된 데이터가 저장이 가능하다. 구조적으로 데이터를 일렬로 늘여놓는 구조를 갖는다. 객체(데이터 등)를 저장하면 인덱스가 자동으로 부여되고 부여된 인덱스를 통해 데이터의 검색 및 삭제가 가능하다.(인덱스에는 데이터가 저장되어 있는 참조 값을 갖는다.) List 컬렉션을 구현하는 대표적인 클래스들은 ArrayList, Vector, LinkedList가 있다. List 인터페이스를 구현하는 클래스들이기 때문에 공통적으로 사용할 수 있는 메서드들이 많다. 기본적인 List의 메소드는 아래와 같다.
ArrayList
ArrayList는 List 인터페이스를 구현한 클래스이다. 설정된 저장 용량(capacity)보다 많은 데이터가 들어오면 자동으로 용량이 늘어난다. ArrayList를 생성하는 방법은 아래와 같다.
List<E> 객체명 = new ArrayList<E>([초기 저장용량]);
초기 저장용량을 생략하면 기본적으로 10의 저장용량을 갖는다. E는 제네릭 타입을 의미하는데 생략하면 Object 타입이 된다. Object는 모든 데이터 타입을 저장 가능하지만 데이터를 추가하거나 검색할 때 형 변환을 해야 한다. 자료구조에는 주로 동일한 데이터 타입을 저장하기 때문에 제네릭 타입을 지정하고 사용하는 것이 좋다. 기본적으로 데이터를 추가할 때는 인덱스 순으로 자동 저장된다. 이때 중간에 데이터를 추가하거나 삭제할 경우에는 인덱스가 한 칸씩 뒤로 밀리거나 당겨진다.
아래 예제는 제네릭 타입을 클래스 타입으로 지정하고 데이터를 저장하고 갖고 오는 방법이다. 기본적인 방법은 똑같다.
처음 예제와 다른 점이라면 Avengers 자료형에 ArrayList의 인덱스에 저장된 참조값을 얻어오고, 해당 참조값으로 해당되는 객체의 데이터(name, id, age)를 구해와야 한다.
Vector
ArrayList와 동일한 구조를 갖는다. 차이점이라면 Vector는 자동 동기화를 보장하므로 멀티 스레드 환경에서 안정적으로 사용이 가능하다. 하지만 단일 스레드에서는 ArrayList가 성능이 더 좋다. Vector를 생성하는 방법은 다음과 같다.
List<E> list = new Vector<e>([초기용량,</e> 증가용량]);
초기용량과 증가용량을 생략하면 기본 값인 0으로 설정된다. 아래 예제는 키보드로 회원정보를 입력받고 데이터를 저장해 두었다가 출력하는 예제이다.
LinkedList
List의 구현 클래스이므로 ArrayList나 Vector와 사용 방법은 동일하다. 하지만 구조는 다르게 구성되어 있다. 위의 컬렉션들은 인덱스로 데이터를 관리하지만 LinkedList는 인접한 곳을 링크하여 체인처럼 관리한다. LinkedList는 중간의 데이터를 삭제할 때 인접한 곳의 링크만을 변경하면 되기 때문에 중간에 데이터를 추가/삭제하는 경우 처리 속도가 빠르다. 차이점은 아래와 같다.
상황에 따라 적절한 컬렉션을 사용하면 된다. LinkedList를 생성하는 방법은 아래와 같다.
List<E> list = new LinkedList<E>();
'자료구조' 카테고리의 다른 글
자바 스택(Stack), 큐(Queue) (0) | 2018.07.20 |
---|---|
JAVA 자바 Map 컬렉션 HashMap, Hashtable (0) | 2018.07.13 |
[JAVA 자바] Set - HashSet, TreeSet, LinkedHashSet (0) | 2018.07.12 |
자바 collection 자료구조 의미 / 종류 / 차이점 (0) | 2018.07.11 |