[Java] List Interface (리스트 인터페이스)
ListInterface(리스트 인터페이스)는 대표적인 선형 자료구조로 순서가 있고 중복을 허용한다.
List는 우리가 흔히 사용하는 배열과 매우 유사하다. 배열을 쓸 때 배열의 길이를 10으로 선언하고 10 이상의 인덱스에 값을 넣으면 IndexOutofBoundsException이 발생한다.
이런 단점을 보완하여 List를 통해 '동적 크기'를 갖는다. 마치 배열처럼 사용할 수 있다.
배열과 List 인터페이스의 공통점과 차이점은 무엇일까?
[공통점]
1. 동일한 특성의 데이터를 묶는다.
2. 반복문내에 변수를 이용하여 하나의 묶음 데이터들을 접근할 수 있다.
[차이점-배열]
1. 처음 선언한 배열의 크기(길이)는 변경할 수 없다. 이것을 정적 할당(static allocation)이라고 한다.
2. 메모리에 연속적으로 나열되어 할당.
3. 만약 어떤 index의 값(value)을 삭제해도 그 index는 계속 빈 공간으로 남는다.
[차이점 - 리스트]
1. 만약 어떤 index의 값(value)을 삭제하면 빈 공간을 허용하지 않는 리스트 특성상 다시 빈 공간을 채운다.
2. 리스트의 길이를 계속해서 추가 삭제하기 용이하다. 동적 할당(dynamic allocation).
3. 데이터들이 연속적으로 나열된다.
Array(배열)의 장단점
장점
- 인덱스를 통한 검색이 쉽고 빠르다.
- 메모리 관리가 편하다.
단점
- 크기가 고정되어 있기 때문에 삭제된 상태를 빈 공간으로 남겨두어 메모리가 낭비된다.(static allocation)
- 컴파일 이후 배열의 크기를 변동할 수 없다.
- 정적이므로 배열의 크기를 컴파일 전에 잘 정해줘야 한다.
List의 장단점
장점
- 포인터를 통하여 데이터를 삽입 추가 삭제에 용이하다.
- 동적이므로(dynamic allocation)이라 크기가 계속해서 늘리거나 줄일 수 있다.
- 메모리의 재사용 편리
- 메모리 관리 편리
단점
- 검색에 있어서 성능이 Array보다 떨어진다.
추가/삭제 | 검색 | |
Array | 느림 | 빠름 |
List | 빠름 | 느림 |
List 인터페이스에 정의된 메서드는 다음과 같다.
메서드 | 설명 |
void add (int index, Object element) boolean addAll (int index, Collection c) |
지정된 위치(index)에 객체(element) 또는 컬렉션에 포함된 객체들을 추가한다. |
Object get (int index) | 지정된 위치(index)에 있는 객체를 반환한다. |
int indexOf (Object o) | 지정된 객체의 위치(index)를 반환한다. (List의 첫 번째 요소부터 순방향으로 찾는다.) |
int lastIndexOf (Object o) | 지정된 객체의 위치(index)를 반환한다. (List의 마지막 요소부터 역방향으로 찾는다.) |
Listlterator listlterator() Listlterator listlterator (int index) |
List의 객체에 접근할 수 있는 Listlterator를 반환한다. |
Object remove (int index) | 지정된 위치 (index)에 있는 객체를 삭제하고 삭제된 객체를 반환한다. |
Object set (int index, Object element) | 지정된 위치(index)에 객체(element)를 저장한다. |
void sort (Comparator c) | 지정된 비교자(comparator)로 List를 정렬한다. |
List subList (int fromIndex, int toIndex) | 지정된 범위 (fromIndex부터 toIndex)에 있는 객체를 반환한다. |
List 공부할 때 참고하기 좋은 글
https://velog.io/@adam2/Array%EC%99%80-List%EA%B7%B8%EB%A6%AC%EA%B3%A0-Java-List
[자료구조]Array와 List(그리고 Java List)
Array와 List 그리고 자바의 Collection
velog.io
https://st-lab.tistory.com/146
자바 [JAVA] - List Interface (리스트 인터페이스)
자료구조 관련 목록 링크 펼치기 더보기 0. 자바 컬렉션 프레임워크 (Java Collections Framework) 1. 리스트 인터페이스 (List Interface) - [현재 페이지] 2. 어레이리스트 (ArrayList) 3. 단일 연결리..
st-lab.tistory.com
대표사진
<a href="https://www.flaticon.com/kr/free-icons/" title=" 아이콘"> 아이콘 제작자: Freepik - Flaticon</a>
https://www.flaticon.com/kr/free-icon/java_152760?term=%EC%9E%90%EB%B0%94&related_id=152760