본문 바로가기

코린이

chapter13 컬렉션 프레임워크 본문

자바/혼공 학습단 10기

chapter13 컬렉션 프레임워크

winsome99 2023. 8. 12. 22:05
반응형

기본미션: 직접 정리한 키워드 공유하기

13-1 컬렉션 프레임워크

자바는 자료구조를 사용해서 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 인터페이스와 구현 클래스를 java.util패키지에서 제공

컬렉션은 객체의 저장을 뜻하고 프레임 워크는 사용 방법을 정해놓은 라이브러리를 말한다.

컬렉션의 주요 인터페이스은 List, Set, Map이 있다.

List 컬렉션

배열과 비슷하게 객체를 인덱스로 관리한다.

차이점

  • 저장 용량이 자동적으로 증가
  • 객체를 저장할 때 자동 인덱스가 부여된다.
  • 객체 자체를 저장하는 것이 아닌, 객체의 번지를 참조

List 구현 클래스

  • ArrayListArrayList를 생성하기 위해서는 저장할 객체 타입을 E 타입 파라미터 자리에 표시하고 기본 생성자를 호출
  • List<E> list = new ArrayList<E>(); //<E>는 타입 파라미터
  • Vetor
    • ArrayList와 동일한 내부 구조
    • AVector는 동기화된 메소드로 구성되어 있어 멀티 스레드가 동시에 Vector의 메소드들을 실행할 수 없다.(다른 스레드가 메소드를 실행을 완료해야 다른 스레드가 메소드를 실행)
  • List<E> list = new Vector<E>(); List<E> list = new Vector(); //Vector의 E 타입 파라미터를 생략하면 왼쪽 List지정된 타입을 따라감
  • LinkedList
    • ArrayList는 내부 배열에 객체를 저장해서 관리하지만, LinkedList는 인접 참조를 링크해서 체인처럼 관리
    • 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다.

Set 컬렉션

  • 저장 순서가 유지되지 않는다.
  • 객체를 중복해서 저장할 수 없고, 하나의 null만 저장할 수 있다. 
    • HashSet
      Set<E> set = new HashSet<E>(); // E에는 컬렉션에 저장할 객체 타입을 지정
      
      객체들을 순서 없이 저장하고 동일한 객체는 중복 저장하지 않음
    • HashSet이 판단하는 동일한 객체란 같은 인스턴스를 뜻하지 않는다.
    • Set인터페이스의 구현 클래스로 생성하기 위해서는 기본 생성자를 호출하면 된다.
  • Set<String> set = ...; set.add("홍길동"); // 객체 추가 set.add("winsome99"); set.remove("홍길동"); //객체 삭제
  • Set 컬렉션에 String 객체를 저장하고 삭제하는 방법

Map컬렉션

키와 값으로 구성된 Map.Entry 객체를 저장하는 구조를 가지고 있다.

Entry는 Map 인터페이스 내부에 선언된 중첩 인터페이스로 키와 값은 모두 객체이다.

  • HashMap
  • Map 인터페이스를 구현한 대표적인 Map 컬렉션으로 HashMap의 키로 사용할 객체는 hashCode()와 equals() 메소드를 재정의해서 동등 객체가 될 조건을 정해야 한다.
  • HashtableHashMap과 차이점은 Hashtable은 동기화된 메소드로 구성되어 있어 멀티 스레드가 동시에 Hashtable의 메소드들을 실행할 수 없고 하나의 스레드가 실행을 완료해야한다. 다른 스레드를 실행할 수 있다.(멀티 스레드 환경에 안전하다.)
  • HashMap과 동일한 내부 구조를 가지고 있어, 키로 사용할 객체는 hashCode()와 equals() 메소드를 재정의해서 동등 객체가 될 조건을 정해야 한다.

13-2 LIFO와 FIFO 컬렉션

LIFO와 FIO는 기초이고 알고리즘에서 배워서 간단하게 설명하겠습니다.

LIFO: 후입선출로 나중에 들어간 객체가 먼저 빠져나가는 자료구조이다. 대표적인 예로는 스택(stack)이 있다.

FIFO: 선입선출로 먼저 들어간 객체가 가장 먼저 빠져나가는 자료구조이다. 대표적인 예로는 큐(queue)가 있다.

 

선택미션: p.573 코딩 과정 및 실행 결과 캡처

/**
 * HashMapExample
 */
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapExample {
    public static void main(String[] args) {
        //Map 컬렉션 생성
        Map<String, Integer> map = new HashMap<String, Integer> ();
        
        //객체 저장
        map.put (" 신용권", 85);
        map.put("홍길동", 90);
        map.put("동장군", 80);
        map. put("홍길동", 95); 
        System.out.println("총 Entry 4: " + map.size());
        
        //객체 찾기
        System.out.println("\t홍길동: " + map.get("홍길동"));
        System.out.println();
        //객체를 하나씩 처리
        Set<String> keySet = map.keySet();
        Iterator<String> keyIterator = keySet.iterator ();
        while(keyIterator.hasNext()) {
            String key = keyIterator.next();
            Integer value = map.get(key);
            System.out.println("\t" + key + " : " + value);
        }
        System.out .println();
        
        //객체 삭제
        map.remove("홍길동"); 
        System.out.println("& Entry 수: " + map.size());
        
        //객체를 하나씩 처리
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        Iterator<Map. Entry<String, Integer>> entryIterator = entrySet.iterator ();
        
        while(entryIterator.hasNext()) {
            Map. Entry<String, Integer> entry = entryIterator.next();
            String key = entry.getKey();
            Integer value = entry.getValue() ;
            System.out .println("\t" + key + " : " + value);
        }
        System.out.println();
        
        //객체 전체 삭제
        map.clear();
        System.out.println("총 Entry 수: " + map.size());
    }
}

반응형

'자바 > 혼공 학습단 10기' 카테고리의 다른 글

Chapter14 입출력 스트림  (0) 2023.08.20
혼공자 4주차 미션  (0) 2023.07.30
chapter12 스레드  (0) 2023.07.29
혼공단 3주차 미션  (0) 2023.07.23
혼공자 Chapter11 API  (0) 2023.07.21
Comments