오늘은 어제보다 나아지길
[Java] 컬렉션 프레임워크 본문
자바에서 컬렉션 프레임워크의 주요 인터페이스는 LIst, Set, Map이 있다.
컬렉션들의 특징
인터페이스 분류 | 특징 | 구현 클래스 | |
Collection | List | - 순서를 유지하고 저장 - 중복 저장 가능 |
ArrayList, Vector, LinkedList |
Set | - 순서를 유지하지 않고 저장 - 중복 저장 안됨 |
HashSet, TreeSet | |
Map | - 키와 값의 쌍으로 저장 - 키는 중복 저장 안 됨 |
HashMap, HashTable, TreeMap, Propertues |
List 컬렉션
List 컬렉션은 객체를 일렬로 늘어놓은 구조이며
객체를 인덱스로 관리하기에, 객체를 검색, 삭제할 수 있는 기능을 제공한다.
기능 | 메소드 | 설명 |
객체 추가 |
add(E e) | 주어진 객체를 맨 끝에 추가 |
add(int index, E element) | 주어진 인덱스에 객체를 추가 | |
set(int index, E element) | 주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈 | |
객체 검색 |
contain(Object o) | 주어진 객체가 저장되어 있는지 여부 |
get(int index) | 주어진 인덱스에 저장된 객체를 리턴 | |
isEmpty() | 컬렉션이 비어 있는지 조사 | |
size() | 저장되어 있는 전체 객체수를 리턴 | |
객체 삭제 |
clear() | 저장된 모든 객체를 삭제 |
remove(int index) | 주어진 인덱스에 저장된 객체를 삭제 | |
remove(Object o) | 주어진 객체를 삭제 |
ArrayList
ArrayList는 List 인터페이스의 구현 클래스, ArrayList에 객체를 추가하면 객체가 인덱스로 관리된다.
// 호출방법
// ArrayList
List<E> list = new ArrayList<E>();
List<String> list = new ArrayList<String)();
list.add("아이스 아메리카노");
list.add("카페 라떼");
list.add(1, "핫초코");
int size = list.size(); // 3
String getList = list.get(2) // 카페 라떼
for(int i=0; i<list.size(); i++){
String str = list.get(i);
System.out.println(i + ":" + str);
// 0 : 아이스 아메리카노
// 1 : 핫초코
// 2 : 카페 라떼
}
list.remove(2) // 카페 라떼 삭제
고정된 객체들로 구성된 List를 생성할 때 ArrayasList(T...a) 메소드를 사용한다.
T 타입 파라미터에 맞게 asList()의 매개값을 순차적으로 입력하거나, T[] 배열을 매개값으로 주면 된다.
// 호출방법
// ArrayasList
List<T> list = ArrayasList(T...a);
List<String> list1 = ArrayasList("자바","오라클","스프링");
for(String str : list1) {
System.out.println(str);
// 자바
// 오라클
// 스프링
}
List<Integer> list2 = ArrayasList(1,2,3);
for(int value : list2) {
System.out.println(value);
// 1
// 2
// 3
}
Vector
ArrayList와 동일한 내부구조를 가졌지만 Vector는 동기화된 메소드로 구성되어 있기에 멀티 스레드 환경에서
안전하게 객체를 추가, 삭제할 수 있다.
// 호출방법
// ArrayasList
List<E> list = new Vector<E>();
list.add("마우스");
list.remove(0);
LinkedList
ArrayList와 사용방법은 똑같지만 내부 구조는 인접 참조를 링크로해서 체인 처럼 관리한다.
빈번한 객체 삭제와 삽입이 일어나는 경우에는 LinkedList가 좋은 성능을 발휘한다.
// 호출방법
// ArrayasList
List<E> list = new LinkedList<E>();
list.add("마우스");
list.remove(0);
Set 컬렉션
Set 컬렉션은 저장 순서가 유지 되지 않고, 중복 저장이 불가능하다.
기능 | 메소드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 저장, 저장되면 true 실패 시 false를 반환 |
객체 검색 |
boolean contains(Object o) | 주어진 객체가 저장되어 있는지 여부 |
isEmpty() | 컬렉션이 비어 있는지 조사 | |
Iterator<E>iterator() | 저장된 객체를 한 번씩 가져오는 반복자 리턴 | |
int size() | 저장되어 있는 전체 객체 수 리턴 | |
객체 삭제 |
void clear() | 저장된 모든 객체를 삭제 |
boolean remove(Object o) | 주어진 객체를 삭제 |
Set 컬렉션에서는 객체를 검색해서 가져오는 메소스가 없기에 객체를 한번씩 반복해서 가져오는
반복자 Iterator 인터페이스를 사용해야 한다.
리턴타입 | 메소드명 | 설명 |
boolean | hasNext() | 가져올 객체가 있으면 true, 없으면 false를 리턴 |
E | next() | 컬렉션에서 하나의 객체를 가져온다. |
void | remove() | 객체를 제거한다. |
HashSet
HashSet은 객체들을 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다.
// HashMap
Set<E> set = new HashMap<E>();
Set<String> set = new HashSet<String>();
set.add("개미");
set.add("배짱이");
set.add("사마귀");
int size = set.size(); // 3
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
String str = iterator.next();
System.out.println(str);
// 개미
// 배짱이
// 사마귀
}
set.remove("배짱이") // 배짱이 삭제
Map 컬렉션
Map 컬렉션은 키와 값으로 구성된 Entry 객체를 저장하는 구조
키와 값은 모두 객체이며 키는 중복 x, 값은 중복 o
기능 | 메소드 | 설명 |
객체 추가 | V put(K key, V value) | 주어진 키와 값을 추가, 저장되면 값을 리턴 |
객체 검색 |
boolean containsKey(Object key) | 주어진 키가 있는지 여부 |
boolean containsValue(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) | 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴 |
HashMap
대표적인 Map 컬렉션
키와 값의 타입은 (byte, short, int, float, double, boolean, char)을 사용할수 없고 클래스 및 인터페이스 타입만 가능
주로 키 타입은 String을 많이 사용한다.
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("수리",90);
map.put("언어",91);
map.put("외국어",100);
map.put("언어",89);
int size = map.size(); // 3
String getMap = map.get("수리"); // 90
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);
// 수리 : 90
// 외국어 : 100
// 언어 : 89
}
Hashtable
HashMap과 동일한 내부 구조를 가지고 있지만 Hashtable은 동기화된 메소드로 구성되어 있기에 멀티 스레드 환경에서
안전하게 객체를 추가, 삭제할 수 있다.
Map<String, Integer> map = new Hashtable<String, Integer>();
map.put("스타벅스",1)
map.get("스타벅스"); // 1
map.remove("스타벅스");
'[Java]' 카테고리의 다른 글
[Java] 상속 (0) | 2021.01.04 |
---|---|
[Java] 클래스 정리 (0) | 2020.11.16 |
[Java] 자바 다시 시작하기 (0) | 2020.11.12 |