컬렉션 클래스 - List
2023.08.22 - [백엔드/자바] - 컬렉션 프레임워크( Collection Framework )
컬렉션 프레임워크( Collection Framework )
더보기 컬렉션 프레임워크가 어떤 역할을 하는지는 알았으나 각각의 인터페이스와 클래스가 어떤 것이 있는지, 그 클래스는 어떤용도로 사용되는지에 익숙하지 않아 수업에 어려움이 있어 다
dustj0824.tistory.com
◎ 컬렉션 클래스(collection class)
- 컬렉션 프레임워크에 속하는 인터페이스를 구현한 클래스
- List와 Set, Map 인터페이스 중 하나의 인터페이스를 구현
- 클래스 이름에 구현한 인터페이스의 이름이 포함
▶ List 컬렉션 클래스
- List 인터페이스를 구현
- 요소의 저장 순서가 유지
- 같은 요소의 중복 저장을 허용
- 순서가 중요한 자료를 다룰 때 사용
- 선형 자료구조
- '동적 크기'를 갖으며 배열처럼 사용할 수 있다
1. ArrayList<E> 클래스
- 가장 많이 사용되는 컬렉션 클래스
- 내부적으로 배열을 이용하여 요소를 저장
- 인덱스를 이용해 배열 요소에 빠르게 접근
- 배열은 크기를 변경할 수 없지만 ArrayList는 저장 용량을 초과한 객체들이 들어오면 자동적으로 저장용량 늘어남
- 크기를 늘리기 위해서는 새로운 배열을 생성하고 기존의 요소들을 옮겨야 하는 과정이 자동으로 수행됨
- iterator() 반복자를 사용하여 ArrayList 원소에 접근 가능(for each문)
- 요소 접근에서는 탁월한 성능
- 삽입, 삭제에서는 비효율적
ArrayList<Integer> arrList = new ArrayList<Integer>();
※ 주요 메소드
add() : 저장
get() : 출력
set() : 변경, 수정
size() : 개수(크기) 반환
remove() : 삭제
2. LinkedList<E> 클래스
- ArrayList 클래스가 배열을 이용하여 요소를 저장함으로써 발생하는 단점을 극복
- 내부적으로 연결 리스트(linked list)를 이용하여 요소를 저장(객체끼리 연결한 방식)
- 연결 리스트는 저장된 요소가 비순차적으로 분포되며, 이러한 요소들 사이를 링크(link)로 연결하여 구성
- 이전 요소를 가리키는 참조도 가지는 이중 연결 리스트(doubly linked list)라고 한다
- LinkedList 클래스는 이중 연결 리스트를 내부적으로 구현한 것
- 삽입, 삭제에서 매우 좋은 효율
- ArrayList 클래스와 사용할 수 있는 메소드가 거의 같다.
LinkedList<String> lnkList = new LinkedList<String>();
-> ArrayList와 LinkedList의 차이는 사용 방법이 아닌, 내부적으로 요소를 저장하는 방법
3. Vector<E> 클래스
- ArrayList 클래스와 같은 동작을 수행
- 기존 코드와의 호환성을 위해서만 남아있으므로, ArrayList 클래스를 사용하는 것이 좋다
4. Stack<E> 클래스
- Vector 클래스를 상속받아, 전형적인 스택 메모리 구조의 클래스를 제공
- List 컬렉션 클래스의 Vector 클래스를 상속받아, 전형적인 스택 메모리 구조의 클래스를 제공
- 스택 메모리 구조를 표현하기 위해, Vector 클래스의 메소드를 5개만 상속받아 사용
- 더욱 복잡하고 빠른 스택을 구현하고 싶다면 Deque 인터페이스를 구현한 ArrayDeque 클래스를 사용
Stack<Integer> st = new Stack<Integer>();
※ 주요 메소드
boolean empty() : 해당 스택이 비어 있으면 true를, 비어 있지 않으면 false를 반환함.
E peek() : 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환함.
E pop() : 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환하고, 해당 요소를 스택에서 제거함.
E push(item) : 해당 스택의 제일 상단에 전달된 요소를 삽입함.
int search(Object o) : 해당 스택에서 전달된 객체가 존재하는 위치의 인덱스를 반환함.
이때 인덱스는 제일 상단에 있는(제일 마지막으로 저장된) 요소의 위치부터 0이 아닌 1부터 시작함.
5. Queue<E> 인터페이스
- 큐 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 선입선출(FIFO)의 시멘틱을 따르는 자료 구조
- 큐 메모리 구조를 표현하기 위해, 다음과 같은 Collection 인터페이스 메소드만을 상속받아 사용
- 클래스로 구현된 스택과는 달리 자바에서 큐 메모리 구조는 별도의 인터페이스 형태로 제공
※ 주요 메소드
boolean add(E e), E element(), boolean offer(E e), E peek(), E poll(), E remove()
* Queue 인터페이스를 상속받는 하위 인터페이스
ㄱ. Deque<E>
ㄴ. BlockingDeque<E>
ㄷ. BlockingQueue<E>
ㄹ. TransferQueue<E>
-> Deque 인터페이스를 구현한 LinkedList 클래스가 큐 메모리 구조를 구현하는 데 가장 많이 사용
LinkedList<String> qu = new LinkedList<String>();
참고자료
http://www.tcpschool.com/java/java_collectionFramework_list
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com