📌List 인터페이스를 구현하는 클래스
- ArrayList, Vector, LinkedList, Stack이 있다.
📌List 특징
- List는 입력 순서대로 데이터가 저장이 되고, Set과 다르게 중복 데이터 저장이 허용된다. 선형 구조로 데이터를 일렬로 놓은 모양이라고 생각하면 된다.
📌List 공통 메소드
boolean add(E e)
- 데이터 삽입
void add(int index, E element)
- index에 데이터 삽입
void clear()
- 데이터 모두 삭제
boolean contains(Object o)
- 데이터가 존재하면 true, 없으면 false 리턴
E get(int index)
- index의 데이터 리턴
boolean isEmpty()
- 데이터가 없으면 true, 하나라도 있으면 false 리턴
E remove(int index)
- index의 데이터 삭제
E set(int index, E element)
- 해당 index의 값을 element로 바꾼다.
int size()
- 데이터의 개수 리턴
Object[] toArray()
- Array형으로 바꿈
<T> T[] toArray(T[] a)
- 매개변수의 배열에 List형을 배열로 반환함.
📌List vs Array
처음에 코드를 짜기에 앞서, 우리는 배열을 쓸지 List를 쓸지 생각해야 한다.
내가 가장 크게 중요하게 생각하는 차이점은 길이를 조정할 수 있는가 없는가이다.
배열은 정적이기 때문에 길이를 조정할 수 없고(배열의 크기를 넘어서 데이터 추가를 하기 위해서는 다시 배열을 만들어야 함), List는 동적으로 길이를 조정할 수 있다.
그래서 데이터의 삽입, 삭제가 빈번하면 List를 사용하고, 검색 위주의 문제라면 array를 쓰는 것이 유리하다.
📌ArrayList
ArrayList는 동적이기 때문에, 초기 용량보다 많은 데이터가 들어오면 자동으로 늘어난다.
List<E> (변수) = new ArrayList<>();
📌Vector
ArrayList와 동일한 구조를 갖지만, Vector는 자동 동기화를 보장해서 멀티 스레드 환경에서 안정적으로 사용 가능하다.
그래서 자동 동기화를 보장하는 Vector가 ArrayList보다 더 느리다. 따라서 멀티스레드 환경이 아닌 경우에는 ArrayList를 사용하는 것이 유리하다.
List<E> (변수) = new Vector<>();
vector 메소드
E elementAt(int index)
- 해당 index에 해당하는 값을 리턴하는
- ArrayList, Vector, LinkedList, Stack이 있다.
📌Stack
이 Stack은 자료구조에서 배웠던 Stack과 같다. Stack 클래스는 Vector클래스를 상속한다.
Stack<E> stack = new Stack<>();
stack 메소드
boolean empty()
- 스텍이 비었으면 true 리턴
E peek()
- 스텍의 top의 값 리턴, pop과 다르게 삭제하지 않음.
E pop()
- 스텍의 top 값 리턴하면서 삭제
E push(E item)
- 스텍에 데이터를 삽입
int search(Object o)
- 스텍에 객체가 존재하면 1을 리턴, 존재하지 않으면 -1을 리턴함.
📌LinkedList
LinkedList는 데이터를 저장하는 노드들이 서로 연결되어있다. 즉, 처음 노드는 두 번째 노드와 연결, 두 번째 노드는 세 번째 노드와 연결되어있다. 그래서 ArrayList와 비교할 때 삽입과 삭제에서는 유리하다. 그러나 LinkedList는 처음부터 노드들을 순차접근 해야하므로 최악의 경우 O(n)이 성립되어 검색에서는 불리하다.
LinkedList 메소드
void addFirst(E e)
- 제일 앞에 데이터 추가
void addLast(E e)
- 제일 마지막에 데이터 추가
E get(int index)
- 해당 index의 값을 리턴
E getFirst()
- 첫 번째 값을 리턴
E getLast()
- 마지막 값을 리턴
'Java' 카테고리의 다른 글
Comparator & Comparable (0) | 2021.04.05 |
---|---|
컬렉션 프레임워크 : Queue, Deque (0) | 2021.04.04 |
Scanner 사용 nextInt() / nextLine() / next() (0) | 2021.03.30 |
컬렉션 프레임워크 : Map (0) | 2021.01.13 |
컬렉션 프레임워크 : Set < HashSet, TreeSet, LinkedHashSet > (0) | 2021.01.13 |