01 HashMap 클래스
02 Collections 클래스
03 Stack 클래스
04 Queue 인터페이스
05 제네릭 클래스
06 제네릭 메소드
# Map<K,V> 인터페이스 주요 메소드
º Map 인터페이스는 키와 값 쌍의 형태로 데이터를 저장해 주는 컬렉션
- 키(key) 값은 중복을 허용하지 않음, 값(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<Key> keySet() | 맵의 키들을 Set 형태로 반환 |
V put(K key, V value) | 파라미터로 지정해준 키와 값으로 요소를 추가 |
V remove(Object key) | 파라미터로 지정한 키를 가지고 있는 요소를 제거 |
int size() | 전체 요소의 개수를 반환 |
# HashMap<K,V>
º HashMap<K,V>의 특성
- import java.util.HashMap;
- K는 키로 사용할 요소의 타입을, V는 값을 사용할 요소의 타입을 지정
- 키(key)와 값(value)의 쌍으로 구성되는 요소를 다루는 컬렉션
→ 키와 값이 한 쌍으로 삽입됨
→ 키는 내부적으로 해시맵에 삽입되는 위치 결정에 사용
→ 값을 검색하기 위해서는 반드시 키 이용
- 삽입 및 검색이 빠른 특징
- 요소 검색 : get() 메소드, 요소 삽입 : put() 메소드
# HashMap<K,V> 예제 프로그램
- HashMap<String, String> 생성, 요소 삽입 요소 검색 프로그램
import java.util.HashMap;
public class HashMapDemo {
public static void main(String[] args) {
HashMap<String, String> h = new HashMap<String, String> ();
h.put("apple", "사과"); //"apple"키와 "사과" 값의 쌍을 해시맵에 삽입
String kor = h.get("apple"); //"apple"키로 값 검색. kor는 "사과"
Syste.out.println(kor);
}
}
# HashMap<K,V>의 주요 메소드
메소드 | 설명 |
void clear() | HashMap의 모든 키 삭제 |
boolean containsKey(Object key) | 키를 포함하고 있으면 true 리턴 |
boolean containsValue(Object value) | 하나 이상의 키를 지정된 값에 맵핑시킬 수 있으면 true 리턴 |
V get(Object key) | 지정된 키에 맵핑되는 값을 리턴하거나 맵핑되는 값이 없으면 null 리턴 |
boolean isEmpty() | HashMap이 비어 있으면 true 리턴 |
Set<K> keySet() | HashMap에 있는 모든 키를 담은 Set<K> 컬렉션 리턴 |
V put(K key, V value) | key와 value를 맵핑하여 HashMap에 저장 |
V remove(Object key) | 지정된 키와 이에 매핑된 모든 값들을 HashMap에서 삭제 |
int size() | HashMap에 포함된 요소의 개수 리턴 |
# HashMap을 이용한 학생 정보 저장
class Student { //학생을 표현하는 클래스
int id;
String tel;
public Student(int id, String tel) {
this.id = id; this.tel = tel;
}
}
import java.util.*;
public class HashMapStudentEx {
public static void main(String[] args) {
//학생 이름과 Stuent 객체를 쌍으로 저장하는 HashMap 컬렉션 생성
HashMap<String, Student> map = new HashMap<String, Student> ();
//3명의 학생 저장
map.put("진달래", new Student(1, "010-111-1111"));
map.put("목련꽃", new Student(2, "010-222-2222"));
map.put("노란꽃", new Student(3, "010-333-3333"));
System.out.println("HashMap의 요소 개수 : " + map.size());
//모든 학생 출력. map에 들어 있는 모든 (key, value) 쌍 출력
//key 문자열을 가진 집합 Set 컬렉션 리턴
Set<String> names = map.keySet();
//key 문자열을 순서대로 접근할 수 있는 Iterator 리턴
Iterator<String> it = names.iterator();
while(it.hasNext()) {
String name = it.next(); //다음 키. 학생 이름
Student student = map.get(name);
System.out.println(name + " : " + student.id + " " + student.tel);
}
}
# Collections 클래스 활용
- java.util 패키지에 포함
- 컬렉션에 대해 연산을 수행하고 결과로 컬렉션 리턴
- 모든 메소드는 static 타입
- 주요 메소드
→ 컬렉션에 포함된 요소들을 정렬하는 sort() 메소드
→ 요소의 순서를 반대순으로 정렬하는 reverse() 메소드
→ 요소들의 최대값, 최소값을 찾아내는 max(), min() 메소드
→ 특정 값인 이진검색의 binarySearch() 메소드
# Stack 구조
º Stack : 맨 나중에 넣은 데이터가 먼저 나오는 구조이다.
# Stack<E> 클래스
º Vector<E> 클래스를 상속한다.
메소드 | 설명 |
Stack() | 생성자 : 비어 있는 스택을 생성한다. |
boolean empty() | 스택이 비어 있는지 점검한다. |
E peek() | 스택 top의 객체를 제거하지 않은 채, 복사본을 반환한다. |
E pop() | 스택 top의 객체를 제거하면서 반환한다. |
E push(E item) | 스택 top에 item을 삽입한다. |
int search(Object o) | 객체 o가 스택에 들어 있는지 검사하여 위치를 반환한다. |
# Queue 구조
º Queue : 먼저 넣은 데이터가 먼저 나오는 구조이다.
º Queue와 Stack의 비교
# 요약
- 컬렉션은 JDK 1.5 버전 이후 제네릭 기법으로 만들어져 있음.
- 제네릭은 일반화시킨 타입을 사용하여 특정 타입에 종속되지 않도록 클래스나 인터페이스, 메소드를 입력화시키는 기법임. 제네릭에 구체적인 타입을 지정하여 특정 타입으로 변신하여 사용 가능
컬렉션은 구체적인 타입을 지정하여 사용함.
Vector v = new Vector()
컬렉션의 요소로 객체들만 사용됨
int, char, double 등의 기본 타입을 컬렉션의 요소로 삽입하려면 Wrapper 클래스를 이용하여 기본 타입을 객체로 만들어 사용
JDK 1.5부터는 자동 박싱 기능에 의해 기본 타입의 값이 컬렉션에 삽입될 때 자동으로 Wrapper 클래스로 포장되어 삽입되고, 추출될 때 자동 언박싱 기능에 의해 기본 타입의 값으로 자동 변환됨.
Collection 인터페이스를 구현한 컬렉션의 경우 iterator() 메소드를 호출하면 Iterator 객체를 리턴하며, 이 객체를 이용하여 인덱스 없이 컬렉션의 요소에 대해 순차 검색이 가능함.
Collectons 클래스는 컬렉션에 대해 요소, 정렬, 검색, 최대 최소값 구하기 등 다양한 유틸리티 메소드를 제공함.
제네릭을 이용하면 컴파일 시에 타입이 결정되어 불필요한 오류를 방지하므로 안전한 프로그래밍이 가능함.
제네릭 클래스 또는 인터페이스 선언은 타입 매개변수를 클래스나 인터페이스 이름 다음에 추가하여 선언함.
제네릭 타입으로 제네릭 클래스 내에서 객체와 배열을 생성할 수 없음.
Stack은 LIFO(Last In First Out) 구조임. 이를 위해 push(), pop() 메소드가 정의되어 있음.
Queue는 FIFO(First In First Out) 구조임. Offer(), add(), remove(), poll() 메소드가 제공됨. Queue는 인터페이스이고 이를 구현하는 컬렉션이 LinkedList 이므로, Queue가 필요하면 LinkedList를 만들어 사용.
제네릭 클래스를 정의해 쓸 수 있음. 그 클래스 안에서는 타입 매개변수가 나타내는 타입의 객체는 만들 수 없음. 객체를 만들어야 한다면 Object 타입이 객체를 만들면 됨.
일반 클래스에서도 제네릭 메소드를 정의해 쓸 수 있음
'JAVA > 자바 이론' 카테고리의 다른 글
Java | 8 입출력 스트림 (0) | 2021.06.12 |
---|---|
Java | 7-1 제네릭과 컬렉션 (0) | 2021.06.10 |
Java | 6 패키지 (0) | 2021.06.06 |
Java | 5-2 상속과 다형성 (0) | 2021.05.25 |
Java | 5-1 상속과 다형성 (0) | 2021.05.25 |