ch13. 컬렉션 프레임워크

728x90

ch13. 컬렉션 프레임워크

13-1. 컬렉션 프레임워크

[컬렉션 프레임워크]

: 자료구조 개념 이용하여 객체들을 효율적으로 관리하고자

           java.util 패키지에서 제공하는 인터페이스, 구현 클래스들을 총칭함

: 인터페이스(사용 방법 정의) + 구현 클래스(실체)

   = 컬렉션 인테페이스 (List/Set/Map) + 컬렉션 클래스(구현 클래스)

🟩[List 컬렉션] : List 인터페이스

: 객체들을 인덱스로 관리

: 저장 용량 자동 증가, 자동 인덱스 부여

: 객체 자체를 저장 X 객체의 번지를 참조 O

<특징>

  • 객체 저장 순서 유지
  • 객체 중복 저장 O
  • null 저장 O

[List 컬렉션 메소드]

객체 추가

  • 맨 끝에 객체 추가 : add(객체);
  • 지정 인덱스에 객체 추가 : add(인덱스, 객체);
  • 지정 인덱스 객체 교체 : set(인덱스, 객체);

객체 검색

  • 객체 존재 여부 조사 : contains(객체);
  • 지정 인덱스의 객체 리턴 : get(인덱스);
  • 저장된 전체 객체 수 리턴 : size();
  • 빈 컬렉션인지 조사 : inEmpty();

객체 삭제

  • 모든 객체 삭제 : clear();
  • 지정 인덱스 객체 삭제 : remove(인덱스);
  • 지정 객체 삭제 : remove(객체);

[List 컬렉션 저장 모든 객체 대상 하나씩 처리]

(1) 인덱스 이용하는 방법

List<타입> list = ...;

for (int i=0; i< **list.size()**; i++) {

객체타입 변수 = **list.get(i)**;

}

(2) 향상된 for문 이용하는 방법

List<타입> list = ...;

**for(객체타입 변수 : list)** { //list 컬렉션 내부 돌면서 객체 하나씩 타입변수 저장, for내부 실행

}

[List 인터페이스의 구현 클래스]

(1) [[ArrayList]] : 배열 방식으로 객체 저장

: 기본 생성자로 ArrayList객체 생성 시 초기 용량 : 10개 객체 저장 O

ArrayList 생성

List<타입> list = new ArrayList<타입> ();

List<타입> list = new ArrayList<>(); // 생략 시 왼쪽 타입 따름

(2) [[Vector]] : 동기화된 메소드로 구성

: 멀티 스레드가 동시에 Vector의 메소드 실행 불가능

: 스레드 안전

Vector 생성

List<타입> list = new Vector<타입>();

List<타입> list = new Vector<>(); //생략 시 왼쪽 타입 따름

(3) [[LinkedList]] : 인접참조 링크로 체인처럼 관리

: 특정 인덱스 제거/삽입 시 이음새만 변경. 앞뒤 링크만 수정

: 중간 인덱스 빈번히 변경 일어나면 LinkedList 효율적

: 처음 생성 시 내부는 빈 상태

LinkedList 생성

List<타입> list = new LinkedList<타입>();

List<타입> list = new LinkedList<>(); //생략 시 왼쪽 타입 따름

🟩[Set 컬렉션] : Set 인터페이스

<특징>

  • 객체 저장 순서 유지X
  • 객체 중복 저장 X
  • 하나의 null만 저장 O

[Set 컬렉션 메소드]

객체 추가

  • 중복 객체 아닌 경우 저장 : add(객체); // 중복객체 -> F리턴

객체 검색

  • 객체 존재 여부 검사 : contains(객체);
  • 빈 컬렉션인지 조사 : isEmpty();
  • 저장된 한 번씩 가져오는 반복자 리턴 : Iterator<타입> iterator();
  • 저장된 전체 객체 수 리턴 : size();

객체 삭제

  • 모든 객체 삭제 : clear();
  • 지정 객체 삭제 : remove(객체);

[Set 컬렉션 저장 모든 객체 대상 하나씩 처리]

(1) 반복자를 이용하는 방법

Set<String> set = ...;   //컬렉션 내부 생성 
Iterator<String> iterator = set.iterator(); //반복자 메소드 호출 
  while(iterator.hasNext() ) {  // 가져올 객체 존재하는 동안 반복 
      String str = iterator.next(); // 다음 객체 가져와서 변수 저장 
}

(2) 향상된 for문 이용하는 방법

Set<String> set = ... ; 
for(String str : set) {
}

[Set 인터페이스의 구현클래스]

[[HashSet]]

: 객체 순서없이 저장하며 중복 저장X

: 객체 저장 전 hashCode(), equals() 메소드 이용 -> 중복 객체 판별 후 저장

HashSet 생성

Set<타입> set = new Hashset<타입> ();

🟩[Map 컬렉션] : Map 인터페이스

: 키와 값으로 구성된 Map.Entry 객체 저장하는 구조

: 키와 값 모두 객체

: 키 중복 X, 값 중복 O

: 기존 저장 키와 동일 키에 다른 값 넣어 저장 시 -> 기존 존재하는 키에 다른 값 변경 저장

[Map 컬렉션 메소드]

객체 추가

  • 지정 키로 지정 값 저장 : put(키 , 값 ) ;

객체 검색

  • 지정 키 존재 여부 검사 : containsKey( 키) ;
  • 지정 값 존재 여부 겁사 : contatinsValue( 값) ;
  • 지정 키의 값 객체 리턴 : get(키);
  • 빈 컬렉션 여부 검사 : isEmpty();
  • Set에 모든 Map.Entry 객체 담아 리턴

Set<Map.Entry<K, V> entrySet();

  • Set에 모든 키 객체 담아 리턴

Set keySet();

객체 삭제

  • 모든 객체 삭제 : clear();
  • 키값 일치하는 Map.Entry객체 삭제 : remove(키);

[Map 컬렉션 저장 모든 객체 대상 하나씩 처리]

(1) keySet() 메소드 : 모든 키를 Set컬렉션으로 얻은 후

→ 반복자 이용해서 다시 키를 하나씩 얻고 -> get() 메소드 : 값 얻는 방법

Map<K , V> map = ...;
Set<K> keySet = map.keySet();
Iterator<K> keyIterator = keySet.iterator();
while (keyIterator.hasNext() ) {
 K key = keyIterator.next();
 V value = map.get(key);
}

(2) entrySet() 메소드 : 모든 Map.Entry를 Set 컬렉션으로 얻은 후

→ 반복자 통해 다시 Map.Entry 객체 하나씩 얻고

→ getKey(), getValue() 메소드로 키, 값 얻는 방법

Set <Map.Entry < K, V > > entrySet = map.entrySet();
Iterator<Nao.Entry< K , V> entryIterator = entrySet.iterator();
while(entryIterator.hasNext()) {
 Map.Entry<K , V> entry = entryIterator.next(); 
 K key = entry.getKey();
 V value = entry.getValue();

[Map 인터페이스의 구현 클래스]

(1) [[HashMap]]

: 키로 사용할 객체는 hashCode(), equals() 메소드 재정의하여 동등 객체 조건 정함

: 객체가 달라도 동등 객체라면 같은 키로 간주 -> 중복 저장X

동등 객체 = hashCode값 같고, 내부값도 같은 객체

HashMap 생성

Map <키타입, 값타입> map = new HashMap<키타입, 값타입> ();

(2) [[Hashtable]] : 동기화된 메소드로 구성

: 멀티 스레드가 동시에 실행 불가능 안전한 스레드 환경 구축

Hashtable 생성

Map<키타입, 값타입> map = new Hashtable< 키타입, 값타입> ();

(3) [[Properties]]

13-2. LIFO와 FIFO 컬렉션

🟩[Stack 클래스]

: LIFO(후입선출) 자료구조 제공 클래스

: 맨 위에서만 삽입, 호출, 제거가 일어나는 구조

Stack 객체 생성

Stack <타입> stack = new Stack <타입> ();

<메소드>

객체 삽입 : push(객체); // 맨 위에 삽입

객체 호출 : peek(); // 맨 위 객체 호출 반환

객체 제거 : pop(); // 맨 위 객체 삭제

🟩[Queue 인터페이스]

: FIFO(선입선출) 자료구조 제공 인터페이스

: 삽입은 뒤에서, 제거는 앞에서 일어나는 구조

: LinkedList : Queue 인터페이스 대표 구현 클래스 + List 인터페이스 구현 클래스

Queue 생성 : LinkedList 구현 객체 생성하여 Queue 인터페이스 타입 변환

Queue<타입> 변수 = new LinkedList<타입> () ;

<메소드>

객체 삽입 : offer(객체) // 뒤에서 삽입

객체 호출 : peek(); // 앞에서 호출

객체 제거 : poll(); // 앞에서 제거

728x90

'Java > [문법]_Java(자바)' 카테고리의 다른 글

동빈나_ 정리  (0) 2021.08.30
ch14. 입출력 스트림  (0) 2021.08.24
ch12. 스레드  (0) 2021.08.23
11-1. java.lang 패키지  (0) 2021.08.11
ch10. 예외 처리  (0) 2021.08.05