목차
- List 인터페이스 구성
- List 인터페이스의 메소드
- ArrayList 란?
- ArrayList 의 메소드
- ArrayList 예제
- ArrayList 에 저장된 객체의 삭제 과정
- ArrayList 성능 비교
- LinkedList 란?
- 배열의 장단점
- LinkedList의 특징과 단점
1. List 인터페이스 구성
1) List 인터페이스의 메소드
- void add(int index, Object element) : 지정된 위치(index)에 객체(element) 또는 컬렉션에 포함된 객체들을 추가
- boolean addAll(int index, Collect c) : 지정된 위치(index)에 객체(element) 또는 컬렉션에 포함된 객체들을 모두 추가
- Object remove(int index) : 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체를 반환
- Object get(int index) : 지정된 위치(index)에 있는 객체를 반환
- int indexOf(Object o) : 지정된 객체의 위치(index)를 반환 (List의 첫 번째 요소부터 순방향으로 찾는다)
- int lastIndexOf(Object o) : 지정된 객체의 위치(index)를 반환 (List의 마지막 요소부터 역방향으로 찾는다)
- ListIterator listIterator() : List 객체에 접근할 수 있는 ListIterator를 반환
- ListIterator listIterator(int index) : List 객체 위치(index)에 접근할 수 있는 ListIterator를 반환
- Object set(int index, Object element) : 지정된 위치(index)에 객체(element)를 저장
- void sort(Comparator c) : 지정된 비교자(Comparator)로 List를 정렬
- List subList(int fromIndex, int toIndex) : 지정된 범위(fromIndex 부터 toIndex)에 있는 객체 반환
2. ArrayList 란?
- 한번 생성하면 길이 조절이 불가능한 배열을 보안하기 위한 컬렉션 중 하나 (= 길이 조절이 가능한 배열)
- ArrayList는 기존 Vector를 개선한 것으로 구현 원리와 기능은 동일 (동기화 여부의 차이)
- ArrayList : 동기화 불가능
- Vector : 동기화 가능
- List 인터페이스를 구현하므로, 저장 순서가 유지되고 중복을 허용
- 데이터(객체)의 저장 공간으로 배열을 사용 (배열기반)
1) ArratList 인터페이스의 메소드
- 생성자
- ArrayList() : 기본 생성자
- ArrayList(Collection c) : 매개변수(Collection)에 저장된 데이터를 ArrayList로 저장
- ArrayList(int initialCapacity) : 배열의 길이
- 추가
- boolean add(Object o) : 객체(o)를 넣고 추가 (성공시 true, 아니면 false)
- void add(int index, Obejct element) : 저장위치(index)에 객체(element) 추가
- boolean addAll(Collection c) : 컬렉션(c)를 모두 저장
- boolean addAll(int index, Collection c) : 컬렉션(c)의 저장위치(index)를 설정
- 삭제
- boolean remove(Object o) : 객체(o) 삭제 (성공시 true, 아니면 false)
- Object remove(int index) : 특정위치(index)에 객체(element) 삭제
- boolean removeAll(Collection c) : 컬렉션(c)의 객체 삭제
- void clear() : 모든 객체 삭제
- 검색
- int indexOf(Object o) : 객체(o)가 어디(index)에 있는지 확인 (못 찾으면 -1 반환)
- int lastIndex(Object o) : 객체(o)가 어디(index)에 있는지 역방향부터 확인 (못 찾으면 -1 반환)
- boolean contains(Object o) : 객체(o)가 존재하는지 확인 (있으면 true, 아니면 false)
- Object get(int index) : 특정위치(index)에 있는 객체 반환
- 기타
- Object set(int index, Object element) : 특정위치(index)의 기존 객체를 신규 객체(element)로 변경
- List subList(int fromIndex, int toIndex) : from <= x < to 에 있는 List를 뽑아서 새로운 List로 생성 (읽기 전용)
- Object[] toArray() : ArrayList의 객체 배열 반환
- Object[] toArray(Object[] a) : ArrayList의 객체 배열에 있는 Object 배열 반환
- boolean isEmpty() : ArrayList가 비어있는지 확인
- void trimToSize() : ArrayList의 빈공간 제거
- int size() : ArrayList에 저장된 객체의 개수
2) ArrayList 예제
3) ArrayList 에 저장된 객체의 삭제 과정
- 1) 예제와 같이 첫 번째 객체부터 삭제할 경우 데이터가 남게 되고, 처리속도가 느리기 때문에 일반적으론 2) 처럼 마지막 객체부터 삭제한다
3) ArrayList 성능 비교
- ArrayList vs 배열
- 배열은 길이가 고정된 반면 ArrayList는 배열의 길이를 자동으로 조절해주는 기능을 가지고 있어 가변적이다
- ArrayList vs Vector
- ArrayList와 Vector는 멀티 스레드 환경을 위한 동기화를 제외하고는 거의 유사합니다. 다만, ArrayList는 동기화 처리가 되어 있지 않은 대신 그만큼 처리 속도가 빠르다.
- ArrayList vs LinkedList
- ArrayList는 내부적으로 배열을 기반으로 하기 때문에 데이터의 위치 정보를 바로 알 수 있어 데이터를 읽는 속도가 LinkedList에 비해 빠릅니다. 대신 데이터를 중간에 삽입하거나, 삭제가 빈번한 경우에는 데이터의 이동없이 연결정보만을 가지고 있는 LinkedList가 더 효율적이다.
3. LinkedList 란?
1-1) 배열의 장단점
- 장점
- 배열은 구조가 간단하고 데이터를 읽는데 걸리는 시간(접근시간)이 짧다
- 각 요소가 연속적이다 (원하는 인덱스, 참조값의 데이터를 한번에 얻을 수 있다)
- 단점
- 배열의 크기를 변경할 수 없다 (프로그램이 실행중일 때)
- 배열의 크기가 넘어갔을 때. '1) 더 큰 크기의 배열 생성 2) 기존 배열 복사 3) 참조 변경' 의 3단계를 거쳐야 한다
- 크기 변경을 피하기 위해 충분히 큰 배열을 생성하면 메모리가 낭비된다
- 비순차적인 데이터의 추가 및 삭제 시에 시간이 많이 걸린다
- 배열 끝에 데이터를 추가하거나, 끝에서 부터 데이터를 삭제하는 것은 빠르다
- 비순차 : 배열의 중간 데이터를 추가하거나 삭제하는 것
- 배열의 크기를 변경할 수 없다 (프로그램이 실행중일 때)
1-2) LinkedList의 특징 및 단점
- 배열의 단점(크기 변경 불가, 추가 및 삭제 시에 시간이 오래 걸림)을 보완한 클래스
- 배열과 달리 LinkedList는 불연속적(= 비순차적)으로 존재하는 데이터를 연결(link)
- 특징
- 각 노드가 데이터와 다음 노드 참조 값을 갖고 있다 (다음 노드값만 바꾸면 되기에 변경에 유리)
- 삭제 시, 참조 값만 바꾸면 된다 (삭제가 간단하다)
- 추가 시, 노드 생성 후 앞뒤 노드의 참조 값을 바꾸면 된다 (배열의 크기 변경 3단계보다 빠름)
- 단점
- 데이터 접근성이 나쁘다 (불연속적이기 때문에 특정 요소에 접근하려면 각 요소를 순차적으로 거쳐야 한다)
'IT 언어 > Java' 카테고리의 다른 글
[Java] Map 인터페이스 (HashMap 과 TreeMap) (0) | 2024.02.12 |
---|---|
[Java] Set 인터페이스 (HashSet 과 TreeSet) (0) | 2024.02.12 |
[Java] Collection (List, Set, Map) (0) | 2024.02.08 |
[Java] Date 클래스 ( DecimalFormat() 과 SimpleDateFormat() ) (0) | 2024.02.05 |
[Java] Calendar 클래스 (두 날짜간 차이 계산) --*Q/A (0) | 2024.02.02 |