부트캠프 기록/Section1

[Java] 컬렉션

bbangduck 2022. 9. 17. 20:52

열거형(Enum)

  • 개념
    • 비슷한 상수의 모음
  • 등장배경, 장점
    • 상수명이 중복되는 경우 컴파일 에러 => 인터페이스 사용으로 구별 가능하지만, 타입 안정성 문제 발생(== 연산자를 사용하면 두 상수의 의미가 달라도 같게 표시함)  => 객체 생성으로 해결 가능하지만 코드가 길어지고, 스위치문 사용불가 => enum을 사용하면 같은 값의 구별과 스위치문 사용이 가능함
  • 문법 요소
    • enum 열거형이름 {상수명1, 상수명2, 상수명3, ...}
    • 관례적으로 대문자로 작성
    • 자동으로 0부터 정수값이 할당

 

제네릭

  • 장점
    • 한 클래스에 다양한 타입의 인자를 전달할 수 있음
  • 제네릭 클래스
    • class <class name><타입 매개변수 T>{...}
    • class <class name> <K, V>{...}
    • Type,Key,Value, Element, Number, Result
    • 해당 클래스로 만든 모든 인스턴스와 변수를 공유해야 하는 클래스 변수는 타입 매개변수로 작성 못함
    • 타입 매개변수에 치환될 타입은 참조 타입만 가능
    • 다형성 적용 가능
    • 제한된 제네릭 클래스
      • class <class name> extends <interface name>
      • class <class name> extends <class name>
      • class <class name> extends <class name & interface name>
  • 제네릭 메서드
  • 와일드카드
    • <? extends T>: 상한 제한, T와 T를 상속받는 하위 클래스
    • <? super T>: 하위 제한, T와 T의 상위 클래스

예외처리

  • 예외 처리란
    • 예기치 못한 에러로 프로그램이 비정상적으로 종료되는 것을 막기 위한 처리
  • 컴파일 에러와 런타임 에러
    • 컴파일 에러: IDE가 미리 려줘서 수정하기 쉬움,세미콜론 생략, 오탈자, 잘못된 자료형 등
    • 런타임 에러:  AritimeticException, NullPointerException, ArrayIdexOutOfBoundsException 
    • 에러와 예외: 에러느 복구하기 어려운 수준의 심각한 오류. 메모리부족, 스택오버플로우 등. 엄밀히 말하면 위의 에러들은 예외라고 하는게 정확
  • 예외 클래스 상속 계층도

  • try-catch문
    • e.getMessage(), e.toString()
  • 예외 전가
    • throws: 메서드를 호출한 곳으로 예외 전달
    • throw : 의도적을 예외 발생 시키기

 

 

컬렉션 프레임워크

  • 특정 자료 구조를 이용해 데이터를 추가,삭제,수정,검색 등의 동작을 가능하게 함
  • 컬렉션 프레임워크 구조
  • 구현된 클래스들 기억하기 

 

 

  • List
    • 중복가능, 순서있음
  • Set
    • 중복불가능, 순서없음
  • Map(collection과 별개)
    • 삽입되는 순서와 위치 관련없음
    • Entey 객체를 저장
    • 키는 중복 불가능, 값은 중복가능
     

 

  • collection interface 메소드설명
boolean add(E e) 해당 컬렉션(collection)에 전달된 요소를 추가함. (선택적 기능)
void clear() 해당 컬렉션의 모든 요소를 제거함. (선택적 기능)
boolean contains(Object o) 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인함.
boolean equals(Object o) 해당 컬렉션과 전달된 객체가 같은지를 확인함.
boolean isEmpty() 해당 컬렉션이 비어있는지를 확인함.
Iterator<E> iterator() 해당 컬렉션의 반복자(iterator)를 반환함.
boolean remove(Object o) 해당 컬렉션에서 전달된 객체를 제거함. (선택적 기능)
int size() 해당 컬렉션의 요소의 총 개수를 반환함.
Object[] toArray() 해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함.

 

  • HashMap<K, V> 메서드 설명
void clear() 해당 맵(map)의 모든 매핑(mapping)을 제거함.
boolean containsKey(Object key) 해당 맵이 전달된 키를 포함하고 있는지를 확인함.
boolean containsValue(Object value) 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함.
V get(Object key) 해당 맵에서 전달된 키에 대응하는 값을 반환함.
만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함.
boolean isEmpty() 해당 맵이 비어있는지를 확인함.
Set<K> keySet() 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함.
V put(K key, V value) 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함.
V remove(Object key) 해당 맵에서 전달된 키에 대응하는 매핑을 제거함.
boolean remove(Object key, Object value) 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함.
V replace(K key, V value) 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함.
boolean replace(K key, V oldValue, V newValue) 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함.
int size() 해당 맵의 매핑의 총 개수를 반환함.

 

  • 어떤 컬렉션을 사용할지

 

 

  • 컬렉션에는 object만 저장가능
  • ArryList는 리스트와 달리 메모리를 초과하면 자동으로 메모리가 증가/ 처음 기본은 10byte, 증가는 저장용량의 1.5배씩 
  • ArryList 순차적으로 추가/제거할 때 성능이 좋음
  • LinkedList는 검색할 때는 성능이 좋지 못하지만 중간에 요소를 추가/삭제할 때는 성능이 좋음
  • ArryList 는 내부적(물리적)으로 참조값들이 모여서 저장되지만 LinkedList는 아님
  • HashSet은 해시코드와 equals 메서드로 중복을 확인하고 특정 조건에 따라서 두 메서드를 오버라이딩해서 어떤 요건에서 중복인지 정의할 수 있음
  • Map은 keySet()을 이용해서 iterator 사용 가능
  • Map 의 keySet() 반환값은 set, set이 중복을 허용하지 않는 특징을 이용
  • value는 반환값이 컬렉션, 중복 가능
  • Q. hashMap의 Key가 Integer타입이고, Value가 Boolean 타입일 때, 아래 빈칸에 들어갈 코드는?
    __________________es_ = hashMap.entrySet();

    A. Set<Map.Entry<Integer, Boolean>>
  • ArrayList<>(Collection);
  • ArrayList<>(20);

사진 출처 

1) https://www.geeksforgeeks.org/exceptions-in-java/

2) https://www.javatpoint.com/collections-in-java

3) https://www.javatpoint.com/java-map

4) https://stackoverflow.com/questions/21974361/which-java-collection-should-i-use