[JAVA] Map 인터페이스
Map 인터페이스
- map 인터페이스는 키(key)와 값(value)의 값을 하나의 쌍으로 묶어서 저장한다.
- 키는 중복될 수 없지만 값은 중복을 허용한다.
- 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 사라지고 마지막에 저장된 값이 남는다.
- key는 값을 대표하는 값이다.
- key의 타입은 보통 String, Intger, Long 타입이 주로 사용된다.
- value는 실제로 Map에 저장할 정보를 가지고 있는 객체다.
- 보통 Object가 value의 타입으로 주로 사용된다.
map의 주요 메소드
- V put (k key, V vlaue)
- Map 객체에 key, value 쌍을 저장한다.
- V get(Object key)
- key에 해당하는 Value를 조회한다.
- V remove(Object key)
- key에 해당하는 value를 삭제한다.
- void clear()
- Map 객체에 저장된 모든 key, value의 쌍을 삭제한다.
- int size()
- key, value 쌍의 개수를 반환한다.
- boolean isEmpty()
- map 객체가 비어있으면 true를 반환한다.
- boolean containsKey(Object key)
- 지정된 key가 포함되어 있는지의 여부를 반환한다.
- boolean containsValue(Object value)
- 지정된 value가 포함되어 있는지의 여부를 반환한다.
- Set<Key> keySet()
- Map 객체의 모든 key를 Set 객체에 담아서 반환한다.
- Collection <V> values()
- Map 객체의 모든 value를 Collection 객체에 담아서 반환한다.
- Set<Map.Emtry<K, V» entrySet()
- Map에 저장된 모든 Entry<K, V>를 Set에 담아서 반환한다.
아래와 같은 모양에 익숙해져야 한다.
Map<String, User> // String을 key로, User 객체를 value로 갖고 있는 Map
Map<String, List<Book>> // String을 key로, Book객체의 list(배열)을 갖고 있는 Map
Map 예제 1
public class HashMapSample {
public static void main(String[] args) {
// 아래와 같은 더미데이터로 bookList를 만들었다
List<Book> bookList = new ArrayList<>();
books.add(new Book("소설", "남한산성"));
books.add(new Book("소설", "칼의 노래"));
books.add(new Book("컴퓨터", "이것이 자바다"));
books.add(new Book("외국어", "토익보카"));
books.add(new Book("소설", "레터의 연가"));
books.add(new Book("컴퓨터", "자바의 정석"));
books.add(new Book("외국어", "토익 기출문제"));
books.add(new Book("컴퓨터", "빅데이터 실무"));
books.add(new Book("기술", "머신러닝 가이드"));
books.add(new Book("수험서", "머신러닝 가이드"));
books.add(new Book("대학교재", "머신러닝 가이드"));
books.add(new Book("인문", "머신러닝 가이드"));
// key는 장르명, value는 도서의 개수인 Map 객체를 생성한다
Map<String, Integer> genreCount = new HashMap<>();
for (Book book : bookList) {
// 이 값을 key 값으로 쓸 것이다
String genre = book.getGenre();
// 조회된 장르명이 key에 포함되어 있는지 체크한다
if (genreCount.containsKey(genre)) {
// map 객체에 해당 장르명이 존재하는 경우
int count = book.get(genre);
genreCount.put(genre, count+1);
} else {
genreCount.put(genre, 1);
}
}
// 출력결과: {소설=3, 대학교재=1, 외국어=2, 기술=1, 인문=1, 컴퓨터=3, 수험서=1}
System.out.println(genreCount);
}
// 내부 클래스 Book 객체
static class Book {
private String genre;
private String title;
public Book (String genre, String title) {
this.genre = genre;
this.title = title;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
}
Map 예제 2
public class HashMapSample {
public static void main(String[] args) {
List<Book> bookList = new ArrayList<>();
books.add(new Book("소설", "남한산성"));
books.add(new Book("소설", "칼의 노래"));
books.add(new Book("컴퓨터", "이것이 자바다"));
books.add(new Book("외국어", "토익보카"));
books.add(new Book("소설", "레터의 연가"));
books.add(new Book("컴퓨터", "자바의 정석"));
books.add(new Book("외국어", "토익 기출문제"));
books.add(new Book("컴퓨터", "빅데이터 실무"));
books.add(new Book("기술", "머신러닝 가이드"));
books.add(new Book("수험서", "머신러닝 가이드"));
books.add(new Book("대학교재", "머신러닝 가이드"));
books.add(new Book("인문", "머신러닝 가이드"));
Map<String, List<Book>> bookMap = new HashMao<>();
for (Book book : bookList) {
String genre = book.getGenre();
if (bookMap.containsKey(genre)) {
List<Book> list = bookMap.get(genre);
list.add(book);
} else {
List<Book> list = new ArrayList<>();
list.add(book);
}
}
// 출력결과: {소설=[[소설: 남한산성], [소설: 칼의 노래], [소설: 레터의 연가]],
// 대학교재=[[대학교재: 머신러닝 가이드]],
// 외국어=[[외국어: 토익보카], [외국어: 토익 기출문제]],
// 기술=[[기술: 머신러닝 가이드]],
// 인문=[[인문: 머신러닝 가이드]],
// 컴퓨터=[[컴퓨터: 이것이 자바다], [컴퓨터: 자바의 정석], [컴퓨터: 빅데이터 실무]],
// 수험서=[[수험서: 머신러닝 가이드]]}
System.out.println(bookMap);
}
static class Book {
private String genre;
private String title;
public Book (String genre, String title) {
this.genre = genre;
this.title = title;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String toString() {
return "[" + genre + ": " + title + "]";
}
}
}