List
- List Interface는 대표적인 선형자료구조다.
- 우리가 보통 알고 있는 고정값을 주는 배열구조는 선언한 배열의 크기 이상으로 나아가면 IndexOutofBoundExcpetion이라는 예외가 뜬다.
- 이를 보완하여 나온 것이 List interface를 통해 구현된 클래스들이다.
- 이들은 동적 크기를 가지고 배열처럼 사용할 수 있게 되어있다.
List Interface를 구현하는 클래스
1. ArrayList
2. LinkedList
3. Vector (+Vector를 상속받은 Stack)
List Interface의 대표적인 메소드
ArrayList
- Object[] 배열을 사용하여 primitive 배열 (int[])와 유사한 형태라고 볼 수 있지만, 동적으로 관리되는 배열이다.
- 최상위 타입인 Object 타입으로 배열을 생성하기 때문에 요소 접근 측면에서는 탁월하지만, 중간에 요소가 삽입되거나 삭제가 필요할 때는 요소를 한 칸씩 밀어야 하므로, 비효율적이다.
객체 생성 방법
// 방법 1
ArrayList<T> arraylist = new ArrayList<>();
// 방법 2
List<T> arraylist = new ArrayList<>();
ArrayList는 List를 상속받고 있기 때문에. 2번째 방법으로도 객체 생성이 가능하다.
LinkedList
- 데이터(item)와 주소로 이루어진 클래스를 만들어서 서로 연결하는 방식이다.
- 데이터와 주소로 이루어진 클래스를 노드(Node)라고 한다.
- 노드들은 이전 노드와 이후 노드와 기차처럼 연결되어 있다.(이중 연결 리스트)
- 모두 연결되어 있다보니, 요소를 검색해야 할 때 노드를 모두 방문하여 성능은 떨어진다.
- 하지만, 중간에 노드를 삭제하거나 삽입해야 할 때는 링크를 끊어 새로 연결만 해주면 되므로 좋은 효율을 보인다.
// 방법 1
LinkedList<T> linkedlist = new LinkedList<>();
// 방법 2
List<T> linkedlist = new LinkedList<>();
Vector
- 기본적으로 ArrayList 와 같다.
- Object[] 배열 사용으로 요소 접근에 용이하다.
- ArrayList보다는 성능이 약간 느리다.
// 방법 1
Vector<T> vector = new Vector<>();
// 방법 2
List<T> vector = new Vector<>();
Stack
- Stack은 Vector 클래스를 상속받고 있어서 거의 같다.
// 방법 1
Stack<T> stack = new Stack<>();
// 방법 2
List<T> stack = new Stack<>();
// 방법 3
// Stack은 Vector를 상속하기 때문에 아래와 같이 생성할 수 있다.
Vector<T> stack = new Stack<>();
'Programming > Data Structure' 카테고리의 다른 글
Set 자료구조란 무엇인가? (0) | 2022.03.24 |
---|---|
Queue interface List란? (Deque, LinkedList, ArrayDeque, PriorityQueue) (0) | 2022.03.24 |
자바 컬렉션 프레임워크 (0) | 2022.03.23 |
Java reverse array (0) | 2022.03.23 |
포인터 배열 구조체 (0) | 2022.03.22 |