본문 바로가기

bitcamp/JAVA

컬렉션 프레임워크

1. 컬렉션 프레임워크란?

· 컬렉션 프레임은 Set<E>, List<E>, Queue<E>, Map<K, V>와 같이 크게 4가지로 분류된다.
· 자료구조 및 알고리즘을 구현해 놓은 일종의 라이브러리로써(일종의 class 모임들), 제네릭 기반으로 구현한다.

 

 

2. List<E> 

· List<E> 인터페이스를 구현하는 대표적인 컬렉션은 ArrayList<E>와 LinkedList<E>가 있다.

· List<E> 컬렉션 프레임워크 종류 중 하나로, list, add, size, get, remove 등의 키워드를 사용한다.

 

ArrayList<E>

· 배열 기반으로 이루어진 구조이며, 연속된 구간으로 형성되어 삽입/삭제보다는 검색 위주로 사용된다.

· 잠점: 인스턴스 참조가 빠르다. (주소를 직접적으로 검색)

· 단점: 공간이 부족한 경우, 기존 배열을 복사하여 증가시키기 때문에 비교적 많은 시간이 소요된다.

 

LinkedList<E>

· 리스트 기반으로 이루어진 구조이며, 연속된 구간이 아닌 참조 형태로 형성되어 삽입/삭제 위주로 사용된다.

· 잠점: 객체를 생성하기 때문에 저장 공간을 늘리고, 삭제하는 과정이 단순.하다.

· 단점: 연속된 구간이 아닌 객체를 생성하여 주소를 참조하기 때문에 검색 시간이 비교적 많이 소요된다.

 

 

3. List<E>에 저장된 객체 접근방법

foreach문 사용

 

 

반복자 사용(Iterator)

· 반복자: next(). hsaNext(), remove() 메소드를 사용하며, 일반 반복자는 LinkedList, ArrayList 사용 가능하다.

· 양방향 반복자: next(). hsaNext(), remove(), previous(), hasPrevious() 메소드를 사용하며, ArrayList에서만 사용 가능하다.

 

 

3. Set<E>

· Set<E> 인터페이스를 구현하는 대표적인 컬렉션은 HashSet<E>와 TreeSet<E>가 있으며,

  수학적 집합과 유사한 특성으로 저장 순서가 유지되지 않으며, 중복 저장을 허용하지 않는다.

· TreeSet<E>: List<E>와의 차이점은 중복 저장되지 않으면서, 오름차순으로 정렬된다는 차이가 있다. 

  단, 정렬이 되기 위해서는 Comparable-compareTo를 기반으로 구현된다.

 

 

 

4. Set<E>가 호출되는 원리와 순서를 설명하시오.

· 동일 인스턴스가 저장되지 않기 위해 hashCode()와 equals() 메소드 2가지의 기준을 거쳐 인스턴스를 판단한다.

· 주소를 가진 테이블을 찾아 체계적으로 검색하기 때문에 검색 속도가 가장 빠르고, hashCode() 호출하기 위해서는

  실제 주소를 가진 key가 필요하다. 

 

 1) hashCode를 통한 분류

  · hashCode()는 Object 함수 종류 중 하나이다.

  · 3, 7, 4, 13, 19의 분류 대상이 존재한다면, key를 통해 함수가 호출되어 해쉬알고리즘(ex: num % 3)을 통해 반환 값을

   기준으로 분류하여 군집을 형성하고, 동일한 값들이 모여 동일한 주소를 가진 테이블을 형성한다. 

  ·  

2) equals를 통한 분류(내용 비교!!)

  · hashCode()를 기반으로 분류된 군집에서 equals 메소드를 호출하여 한 번 더 동일 인스턴스가 존재하는지 비교한다.

 

 

 

hashCode를 사용하지 않는다면?

· 함수를 통해 생성된 군집에 객체들이 분류되어야 하는데 사용하지 않는다면 주소값이 생성되지 않아 군집이 생성되지 않는다.

 

 

hashCode 탐색속도 (군집3개<군집10개)

· 세밀하게 군집을 나눌수록 탐색속도가 향상되는 이유는?

  분류 대상의 수가 같다는 조건 하에 군집 3개 안에 있는 항목들을 일일히 대조(equals 연산진행)하는 것보다 10개 안에 

   있는 항목들을 대조하는게 더 빠르기 때문에 탐색이 더 효율적이다.

 

 

 

5. Objects.hash의 용도와 사용법은?

· Objects.hash 메소드는 매개 값으로 주어진 값들을 이용하여 hashCode를 생성하고, 주어진 매개값들로 배열을 생성한다.

· Arrays.hashCode(Objects[])를 호출하여 hashCode를 통해 값을 리턴하고, 더 세밀하게 나누기 때문에 탐색 속도가 향상된다.

· ex) model과 color를 기반으로 hash 값을 리턴

 

 

6. Queue<E>

※Stack과 Queue의 차이

· Stack은 LIFO(last - in - first - out)으로 먼저 저장된 데이터가 마지막에 출력되는 구조를 지닌다.

· Queue는 FIFO(first - in - first - out)으로 먼저 저장된 데이터가 먼저 출력되는 구조를 지닌다.

  offer 넣기(공간 부족 시 false 반환), poll 꺼내기(꺼낼 대상이 없다면 null 반환), peek 확인(확인할 대상이 없다면 null 반환) 

 

 

7. Map<K, V>

· Map은 Key와 Value를 가지고 있으며, Key를 이용해 데이터를 탐색하여 Key에 해당되는 Value를 추출한다.

· HashMap<K , V>은 인터페이스를 구현하지 않기때문에, for-each문과 반복자를 통해 접근을 할 수 없다.
  대신 keySet 메소드를 호출하여 key를 모아, for-each문/ 반복자를 통해 접근할 수 있다. 

· 아래와 같이 사용되며, TreeMap의 경우는 정렬된 형태로 출력된다.

 

 

'bitcamp > JAVA' 카테고리의 다른 글

컬렉션 프레임워크_연습문제2  (0) 2021.02.06
컬렉션 프레임워크_연습문제1  (0) 2021.02.06
제네릭_연습문제  (0) 2021.01.26
제네릭  (0) 2021.01.25
자바의 기본 class_연습문제  (0) 2021.01.25