List
List Interface는 대표적인 선형 자료구조로 주로 순서가 있는 데이터를 목록으로 이용할 수 있도록 만들어진 인터페이스다.
List를 통해 구현된 클래스들은 ‘동적 크기’를 갖으며 배열처럼 사용할 수 있게 되어있다.
→ 배열의 기능 + 동적 크기 할당
List Interface를 구현하는 클래스
ArrayList
LinkedList
Vector (+ Vector를 상속받은 Stack)
List Interface에 선언된 메소드
메소드 | 리턴 타입 | 설명 |
---|---|---|
add(E e) | boolean | 요소를 추가한다. |
remove(Object o) | boolean | 지정된 객체와 같은 첫번째 객체를 삭제한다. |
contains(Object o) | boolean | 지정한 객체가 컬렉션에 있는지 확인한다. 있을 경우 true, 없을 경우 false를 반환 |
size() | int | 현재 컬렉션에 있는 요소 개수를 반환한다. |
get(int index) | E | 지정된 위치에 저장된 원소를 반환한다. |
set(int index,E elements) | E | 지정된 위치에 있는 요소를 지정된 요소로 바꾼다. |
isEmpty() | boolean | 현재 컬렉션에 요소가 없다면 true, 요소가 존재한다면 false를 반환 |
equals(Object o) | boolean | 지정된 객체와 같은지 비교한다. |
indexOf(Object o) | int | 지정된 객체가 있는 첫번째 요소의 위치를 반환한다. 만일 없을 경우 -1 반환 |
clear() | void | 모든 요소를 제거한다. |
ArrayList는 Object[] 배열을 사용하면서 내부 구현을 통해 동적으로 관리를 한다.
LinkedList는 데이터(item)와 주소로 이루어진 클래스를 만들어 서로 연결하는 방식이다.
Stack은 후입선출(LIFO : Last in First out)이라고 하는데, 짐을 쌓는다고 생각하면 쉽다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
T는 객체 타입을 의미하며 기본적으로
Integer, String, Double, Long 같은 Wrapper Class부터 사용자 정의 객체까지 가능하다.
ex) LinkedList<Integer> list = new LinkedList<>();
primitive type은 불가능하다.
*/
// 방법 1
ArrayList<T> arraylist = new ArrayList<>();
LinkedList<T> linkedlist = new LinkedList<>();
Vector<T> vector = new Vector<>();
Stack<T> stack = new Stack<>();
// 방법 2
List<T> arraylist = new ArrayList<>();
List<T> linkedlist = new LinkedList<>();
List<T> vector = new Vector<>();
List<T> stack = new Stack<>();
// Stack은 Vector를 상속하기 때문에 아래와 같이 생성할 수 있다.
Vector<T> stack = new Stack<>();