본문 바로가기

JAVA/#혼공단3기

[혼공자] 5주차 - 13장 컬렉션 프레임워크 키워드 정리

이번주는 13장 컬레션 프레임워크 학습 내용 중 키워드를 정리해서 공유하는 미션이다.

 

컬렉션 프레임워크(Collection Framework)

객체들을 효율적으로 추가, 삭제, 검색을 용이하게 구현할 수 있도록 만든 인터페이스와 구현클래스들의 집합

컬렉션(Collection)

객체의 저장

프레임워크(Framework)

사용방법을 정의해 놓은 라이브러리

List 컬렉션

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

배열과 차이점음 저장용량이 자동으로 증가, 객체를 저장할 때 자동 인덱스가 부여 됨

추가(add), 삭제(remove), 검색(get)을 위한 다양한 메소드 제공

ArrayList, Vector, LinkedList 등이 있다.

List<E> list = ...;

ArrayList

List 컬렉션의 대표적인 구현 클래스

List<E> list = new ArrayList<E>();
List<E> list = new ArrayList<>();    //ArrayList의 E타입 파라미터를 제거하면 왼쪽 List에 지정된 타입을 따라감

ArrayList는 객체를 추가하면 0번 인덱스부터 차례대로 저장.

특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨짐

특정 인덱스의 객체를 삽입하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 1씩 뒤로 밀려남

 

Vector

Vector는 ArrayList와 동일한 내부 구조를 가짐

List<E> list = new Vector<E>();
List<E> list = new Vector<>();    //Vector의 E타입 파라미터를 제거하면 왼쪽 List에 지정된 타입을 따라감

Vector는 동기화된(synchronized) 메서드로 구성, 멀티 스레드가 동시에 Vector 메서드를 실행할 수 없다.

 

LinkedList

LinkedList는 List 구현 클래스. 인접 참조를 링크해서 체인처럼 관리

특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경, 삽입할 때도 앞뒤 링크만 변경 됨

List<E> list = new LinkedList<E>();
List<E> list = new LinkedList<>();    // E타입 파라미터 생략 -> 왼쪽 List에 지정된 타입을 따라 감

Set 컬렉션

List 컬렉션은 객체의 순서를 유지.

Set 컬렉션은 저장 순서가 유지 되지 않고, 객체를 중복해서 자장 할 수 없다.

하나의 null만 저장할 수 있다.

HashSet, LinkedHashSet, TreeSet 등이 있다.

Set 컬렉션은 인덱스로 객체를 가져오는 메서드가 없다. 대신 반복자(Iterator)를 제공하여 한번씩 가져올 수 있다.

Set<String> set = ...;
Iterator<String> iterator = set.iterator();

HashSet

HashSet은 Set 인터페이스 구현 클래스이다.

Set<E> set = new HashSet<E>();

// String 객체를 저장하는 HashSet 생성 방법
Set<String> set = new HashSet<String>();
Set<String> set = new HashSet<>();	// 왼쪽 Set에 지정된 타입을 따라 감

Map 컬렉션

Map 컬렉션은 키(key)와 값(value)으로 구성된 Map.Entry 객체를 저장하는 구조를 가진다.

키는 중복 저장인 안되지만 값은 중복 저장 될 수 있다.

기존에 저장된 키에 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대체된다.

HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등이 있다.

추가(put), 삭제(clear, remove), 검색(containsKey, containsValue, get, entrySet, isEmpty, size, keySet) 메서드 제공

Map<String, Integer> map = ...;
map.put("홍길동", 30);	// 추가
int age = map.get("홍길동");	// 검색
map.remove("홍길동");	//삭제

HasMap

HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션.

동일키 조건 : hashCode()의 리턴값과 equals()가 true를 반환해야 한다.

Map<K, V> map = new HashMap<K, V>();

Map<String, Integer> map = new HashMap<String, Integer>();
Map<String, Integer> map = new HashMap<>();

Hashtable

Hashtable은 HashMap과 동일한 구조를 가진다. 차이점은 Hashtable은 동기환(synchronized) 메서드로 구성되어 있어 멀티스레드가 동시에 Hashtable의 메서드를 실행할 수 없다. 그래서 Hashtable은 스레드에 안전하다.

Map<K, V> map = new Hashtable<K, V>();

Map<String, Integer> map = new Hashtable<String, Integer>();
Map<String, Integer> map = new Hashtable<>();