#혼공단 #혼공챌린지 #혼공자
혼공 챌린지_자바 5주차 기본 미션
chapter 13. 직접 정리한 키워드 정리 공유
13-1. 컬렉션 프레임 워크
컬렉션 프레임 워크
널리 알려진 자료구조를 활용하여 객체들을 효율적으로 활용할 수 있도록 인터페이스와 구현 클래스를 제공하는 기능
-> java.util 패키지에서 제공한다.
컬렉션 (collection)
객체의 저장
프레임 워크
사용 방법을 정해놓은 라이브러리
List 컬렉션
- 객체를 인덱스로 관리 (배열과 유사)
- 저장 용량이 자동 증가 (배열과의 차이점)
- 추가, 삭제, 검색 등을 위한 다양한 메소드 제공
- 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조하는 것
- 동일 객체 중복 저장 가능 (동일한 번지 참조)
- null 저장시 해당 인덱스는 객체를 참조하지 않음
- ArrayLsit, Vector, LinkedList 등이 존재
List 컬렉션에서 공통적으로 사용 가능한 List 인터페이스의 메소드
기능 | 메소드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 맨 끝에 추가 |
void add(int index, E element) | 주어진 인덱스에 객체 추가 | |
E set((int index, E element) | 주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈 | |
객체 검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 조사 |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴 | |
boolean isEmpty() | 컬렉션이 비어 있는지 확인 | |
int size() | 저장되어 있는 전체 객체 수를 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체를 삭제 |
E remove(int index) | 주어진 인덱스에 저장된 객체를 삭제 | |
boolean remove(Object o) | 주어진 객체를 삭제 |
E: 저장되는 객체의 타입을 List 컬렉션을 생성할 때 결정하라는 의미
ArrayList
List 인터페이스의 대표적인 구현 클래스
기본적으로 10개의 객체를 저장할 수 있는 초기 용량을 가지고 저장 객체가 늘어나면 자동으로 용량이 증가한다.
List<E> list = new ArrayList<E>();
//String을 저장하는 ArrayList 객체 생성
List<String> list = new ArrayList<String>();
List<String> list = new ArrayList<>();
- 인덱스를 사용하여 객체를 찾거나 맨 마지막에 객체 추가할 때 사용하면 좋다.
- 저장된 객체 수가 많고, 특정 인덱스에 객체를 추가, 저장하는 일이 많다면 LInkedList를 사용하는 것이 좋다.
Vector
ArrayList와 동일한 내부구조를 가지고 있다.
저장할 객체 타입을 타입 파라미터로 표기한 뒤 기본 생성자를 호출하면 Vector 객체가 생성된다.
List<E> list = new Vector<E>();
List<E> list = new Vector<>();
스레드가 동시에 Vector 메소드를 실행 할 수 없기에 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있다.
LinkedList
ArrayList와 사용 방법은 같지만 내부 구조는 완전히 다르다.
LinkedList는 인접 참조를 링크하여 체인처럼 관리한다.
저장할 객체 타입을 타입 파라미터에 표기하고 기본 생성자를 호출하면 LinkedList가 생성된다.
List<E> list = new LinkedList<E();
List<E> list = new LinkedList<>();
ArrayList VS LinkedList
구분 | 순차적으로 추가, 삭제 | 중간에 추가, 삭제 | 검색 |
ArrayList | 빠르다 | 느리다 | 빠르다 |
LinkedList | 느리다 | 빠르다 | 느리다 |
Set 컬렉션
- List 컬렉션과 달리 저장 순서가 유지되지 않음
- 객체 중복 저장 불가
- 하나의 null만 저장 가능
- 수학의 집합과 유사 (순서 상관없고 중복 없음)
- HashSet, LinkedHasgSet, TreeSet 등이 존재
Set 컬렉션에서 공통적으로 사용 가능한 Set 인터페이스의 메소드
기능 | 메소드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 저장, 성공적으로 저장되면 true를 리턴하고 중복이면 false를 리턴 |
객체 검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 조사 |
boolean isEmpty() | 컬렉션이 비어 있는지 조사 | |
leterator<E> iterator() | 저장된 객체를 한 번씩 가져오는 반복자를 리턴 | |
int size() | 저장되어 있는 전체 객체 수를 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체를 삭제 |
voolean remoce(Object o) | 주어진 객체를 삭제 |
- Set 컬렉션은 인덱스로 객체를 검색하여 가져오는 메소드가 없기에 전체 객체를 대상으로 한 번씩 반복하여 가져오는 반복자(iterator)를 제공함
HashSet
Set 인터페이스의 구현 클래스
Set<E> set = new HashSet<E>();
set<String> set = new HashSet<String>();
Set<String> set = new HashSet<>();
- 객체들을 순서 없이 저장하고, 중복된 객체는 하나만 저장한다.
- 동일한 객체가 반드시 같은 인스턴스를 의미하는 것은 아니다.
- 객체를 저장하기 전 객체의 hashCode() 메소드를 호출하여 해시코드를 얻은 뒤 기존에 저장된 객체들의 해쉬코드를 비교하여 중복된 개체인지 확인한다. (동일한 해쉬코드가 있다면 equals() 메소드를 호출하여 두 객체를 비교한다.)
Map 컬렉션
- 키와 값으로 구성된 Map.Entry 객체를 저장하는 구조를 가지고 있다.
- Entry는 인터페이스 내부에 선언된 중첩 인터페이스이다.
- 키와 객체는 모두 객체이다.
- 키는 중복 저장 가능, 값은 중복 저장 불가
- HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등이 존재
Set 컬렉션에서 공통적으로 사용 가능한 Set 인터페이스의 메소드
기능 | 메소드 | 설명 |
객체 추가 | V put(K Key. V value) | 주어진 키로 값을 저장, 새로운 키일 경우 null을 리턴하고 동일한 키가 있을 경우 값을 대체하고 이전 값을 리턴 |
겍체 검색 | boolean containsKey(Object key) | 주어진 키가 있는지 확인 |
boolean containValue(Object value) | 주어진 값이 있는지 확인 | |
Set<Map.Entry<K, V>>entrySet() | 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아 리턴 | |
V get(Object key) | 주어진 키가 있는 값을 리턴 | |
boolean isEmpty() | 컬렉션이 비어 있는지 확인 | |
Set<k>keySet() | 모든 키를 Set객체에 담아 리턴 | |
int size() | 저장된 키의 총 수를 리턴 | |
Collection<V>values() | 저장된 모든 값을 Collection에 담아서 리턴 | |
객체 삭제 | void clear() | 모든 Map.Entry를 삭제 |
V remove(Object key) | 주어진 키와 일치하는 MapEntry를 삭제한 뒤 값을 리턴 |
K, V는 저장되는 키와 객체의 타입을 Map 컬렉션을 생성할 때 결정하라는 의미
HashMap
Map 인터페이스를 구현한 대표적인 Map 컬렉션
HashMap의 키로 사용할 객체는 hashcode() 와 equals() 메소드를 재정의하여 동등 객체가 될 조건을 정해야 한다.
(객체가 달라도 동등 객체라면 같은 키로 간주하여 중복 저장되지 않도록 하기 위해서)
Map<K, V> map = new HashMap<k, V>();
Map<String, Integer> map = new HashMap<String, Integer>();
Map<String, Integer> map = new HashMap<>();
Hashtable
hashmap과 동일한 내부 구조를 가지고 있다.
Hashtable의 키로 사용할 객체는 hashcode() 와 equals() 메소드를 재정의하여 동등 객체가 될 조건을 정해야 한다.
동기화된 메소드로 구성되어 있어 멀티 스레드가 동시에 Hashtable의 메소드를 실행할 수 없다.
Map<K, V> map = new Hashtable<k, V>();
Map<String, Integer> map = new Hashtable<String, Integer>();
Map<String, Integer> map = new Hashtable<>();
5주차 선택 미션
https://spongerice.tistory.com/121
혼공학습단 6기 5주차 우수 혼공러로 선정이 되었습니다.
감사합니다.
[#혼공챌린지] 혼공 학습단 6기 5주차 우수 혼공러 미션 내용 공유 – 혼자 공부하는 책 (hanbit.co.kr)
'Language > [Java] 혼자 공부하는 자바' 카테고리의 다른 글
[#혼공챌린지] 혼자 공부하는 자바_6주차 기본미션 (0) | 2021.08.13 |
---|---|
[#혼공챌린지] 혼자 공부하는 자바_5주차 선택미션 (0) | 2021.08.08 |
[#혼공챌린지] 혼자 공부하는 자바_4주차 선택미션 (0) | 2021.08.01 |
[#혼공챌린지] 혼자 공부하는 자바_4주차 기본미션 (0) | 2021.08.01 |
[#혼공챌린지] 혼자 공부하는 자바_3주차 선택미션 (0) | 2021.07.25 |