최근들어서 블로깅에 너무 소홀했다.
다시 멘탈 잡고 진행하자.
이번 강의의 주제인 컬렉션 프레임워크는 자료구조를 사용하기위한 일종의 라이브러리로 이해하였다.
대략적으로 List, Set, Queue 그리고 Map로 구성되어 있고, 각 자료구조를 구현하는 각각의 방법들에 대한 내용이었다.
List<E> Interface
- List 인터페이스를 구현하는 컬렉션 클래스
- ArrayList<E> : 배열기반의 Array를 통해서 List 인터페이스를 구현, 배열을 사용해서 인스턴스를 저장
- LinkedList<E> : 연결리스트를 통해서 List 인터페이스를 구현, 연결리스트를 사용해서 인스턴스를 저장
- List<E> 인터페이스의 기본 특성
- 인스턴스의 저장 순서가 유지된다.
- 동일 인스턴스의 중복 저장이 허용된다.
- List 인터페이스의 경우는 파이썬의 리스트와 같은 개념으로 이해하면 좋을 것 같다.
- List 인터페이스를 구현하는 컬렉션 클래스들의 장단점
- ArrayList : 구성하는 각 인스턴스 참조 속도가 빠르고 편하지만 저장된 인스턴스 삭제에 시간이 매우 많이 소요될 수 있다.
- LinkedList : 저장된 인스턴스 삭제가 간단하지만 인스턴스 참조 속도가 매우 많이 소요될 수 있다.
- 두 경우가 완전히 정 반대의 장단점을 가지기 때문에 상황에 맞게 선택해서 사용해야 함
Set<E> Interface
- Set 인터페이스를 구현하는 컬렉션 클래스
- HashSet<E> : 해시 알고리즘을 사용해서 Set 인터페이스를 구현
- TreeSet<E> : 트리 자료구조를 기반으로 Set 인터페이스를 구현, 트리 자료구조의 특성으로 인한 정렬이 가능하다.
- Comparable 인터페이스 또는 Comparator 인터페이스를 구현한 인스턴스로 정렬 기준으로 정할 수 있다.
- Set<E> 인터페이스의 기본 특성
- 중복을 허용하지 않는다.
- 순서를 다룰 수 없다.
- 즉, 집합의 특성을 지닌다.
- Set 인터페이스는 파이썬의 세트와 같은 개념으로 이해하면 좋을 것 같다.
- Hash를 사용한다.
- Object 클래스의 equals 메소드 및 hashCode 메소드를 통해서 동일한 인스턴스인지 확인
- hashCode 메소드를 오버라이딩해서 자신만의 해시 알고리즘을 적용하여 사용할 수 있다.
Queue and Stack Interface
- Queue<E> Interface
- FIFO 특성을 지닌 큐 자료구조를 구현하는 인터페이스
- LinkedList를 사용해도 Queue<E> 인터페이스를 구현할 수 있다.
- 인터페이스 메소드들
- boolean add(E e) : Queue에 넣기
- E remove() : Queue에서 꺼내기
- E element() : 확인하기
- boolean offer(E e) : Queue에 넣기, 공간이 부족하면 False 반환
- E poll() : Queue에서 꺼내기, 꺼낼 대상이 없으면 Null 반환
- E peek() : 확인하기, 대상이 없으면 Null 반환
- Deque<E> Interface
- LIFO 특성을 지닌 스택 자료구조를 구현하는 인터페이스
- 자바에서 스택은 Deque을 기준으로 구현하는 것이 원칙
- 인터페이스 메소드들
- boolean offerFirst(E e) : 앞으로 넣기, 공간이 부족하면 False 반환
- E pollFirst() : 앞에서 꺼내기, 꺼낼 대상이 없으면 Null 반환
- E peekFisrt() : 앞에서 확인하기, 대상이 없으면 Null 반환
- boolean offerLast(E e) : 뒤에서 넣기, 공간이 부족하면 False 반환
- E pollLast() : 뒤에서 꺼내기, 대상이 없다면 Null 반환
- E peekLast() : 뒤에서 확인하기, 대상이 없으면 Null 반환
Map<K, V> Interface
- Map<K, V> Interface 를 구현하는 컬렉션 클래스
- HashMap<K, V> : Hash를 사용해서 Hash 결과 값을 활용해서 Map 인터페이스를 구현
- TreeMap<K, V> : 트리 자료구조를 기반으로 Map 인터페이스를 구현한다. 기본적으로 Key값 기준 오름차순으로 정렬된다.
- Map<K, V> 인터페이스의 기본 특성
- Key - Value의 형태로 데이터를 저장한다.
- Iterable 인터페이스를 상속하지 않아서 해당 기능을 사용할 수 없다.
- 파이썬의 Dictionary 자료형이나 JSON포맷과 유사한 형태
Java의 반복자 - Iterator (Iterable 인터페이스)
- 파이썬의 반복자와 동일하다.
- 반복자의 메소드
- next() : 다음 인스턴스의 참조값 반환
- hasNext() : next() 호출 시 참조값 반환이 가능한지 여부를 True/False로 반환
- remove() : next() 호출 시 반환될 인스턴스를 삭제
- 반복자는 선언 후 할당된 후에도 참조중이지 않다. 기본적으로는 next() 메소를 호출해야 참조
- 리스트 기반의 컬렉션 클래스는 양방향 반복자를 사용할 수 있다. ListIterator라고 부른다.
- previous() : 이전 인스턴스의 참조값 반환
- hasPrevious() : previous() 호출 시 참조값 반환이 가능하지 여부를 True/False로 반환
'프로그래밍 > Java' 카테고리의 다른 글
Java - 열거형과 가변인자, 어노테이션 (0) | 2020.10.14 |
---|---|
Java - Collection (2) (0) | 2020.10.09 |
Java - 제네릭 (2) (0) | 2020.09.27 |
Java - 제네릭 (1) (0) | 2020.09.22 |
Java - Java의 기본 클래스 (2) (0) | 2020.09.21 |