Map 컬렉션
: 키와 값으로 구성된 엔트리 객체를 저장
키는 중복 저장이 안되지만, 값은 중복 저장 가능
기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대체
범주 | 메서드 또는 기능 | 설명 |
객체 추가 | V put(K key, V value) | 지정된 키(key)와 값(value)을 매핑, 이전 값 대체 |
객체 검색 | V get(Object key) | 주어진 키(key)에 대응하는 값 반환 |
boolean containsKey(Object key) | 주어진 키(key)가 맵에 존재하는지 확인 | |
boolean containsValue(Object value) | 주어진 값(value)가 맵에 존재하는지 확인 | |
V get (Object key) | 주어진 키(key)에 대응하는 값을 반환 | |
객체 삭제 | V remove(Object key) | 주어진 키(key)와 연결된 항목을 맵에서 제거하고 그 값을 반환 |
void clear( ) | 모든 Map.Entry(키와 값)를 삭제 |
(1) HashMap
: Map 인터페이스를 구현한 Java 컬렉션 클래스 중 하나로 키(key)와 값(value)을 사용하여 데이터를 저장하고 검색하는데 사용
- 키-값 매핑: **HashMap**은 키(key)와 값(value) 간의 매핑을 저장하고, 키를 사용하여 값에 빠른 접근 가능
- 무작위 접근: **HashMap**은 해시 테이블을 사용하므로 키를 이용한 데이터 접근이 매우 빠름
- 중복된 키 처리: 하나의 **HashMap**에 동일한 키가 두 번 이상 나타날 수 없음 (중복된 키는 허용되지 않음)
- 순서 보장 안됨: **HashMap**은 키-값 쌍의 순서를 보장하지 않음. 요소가 저장된 순서대로 접근 불가
예제 1 )
public class Map04 {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "최재호");
map.put(2, "마리오");
map.put(2, "루이지"); // 같은 키 값 넣으면 값이 변경 됨
System.out.println(map);
Map<String, Double> map2 = new HashMap<String, Double>();
map2.put("java", 34.55);
map2.put("oracle", 87.668);
map2.put("spring", 87.23);
System.out.println(map2);
System.out.println(map2.get("spring")); // 키에 해당하는 값이 출력
System.out.println(map2.remove("spring"));
System.out.println(map2);
System.out.println("----------");
mapPrint(map);
}
static void mapPrint(Map<Integer, String> map) {
Set<Integer> keyset = map.keySet();
Iterator<Integer> keyIterator = keyset.iterator();
while(keyIterator.hasNext()) {
int key = keyIterator.next();
map.get(key);
String value = map.get(key);
System.out.println(key + ":" + value);
}
}
}
예제 1 - 출력결과 )
(2) TreeMap
: 이진 트리를 기반으로 한 Map컬렉션
키와 값이 저장된 엔트리 저장
?? Entry"는 자바의 맵 (Map) 인터페이스에서 사용되는 용어로, 맵은 키(key)와 값(value)으로 구성된 쌍을 저장하는 자료 구조이며, 각 쌍은 맵의 "entry"로 간주.
맵의 구현체 중 하나인 HashMap 또는 TreeMap 등에서 맵의 각 entry에 접근할 수 있는 메서드 entrySet()을 제공.
코드예제 1 )
class Snack {
private String flavor;
private int calory;
public Snack() {
}
public Snack(String flavor, int calory) {
this.flavor = flavor;
this.calory = calory;
}
public String getFlavor() {
return flavor;
}
public void setFlavor(String flavor) {
this.flavor = flavor;
}
public int getCalory() {
return calory;
}
public void setCalory(int calory) {
this.calory = calory;
}
@Override
public String toString() {
return "Snack [flavor=" + flavor + ", calory=" + calory + "]";
}
}
public class TreeMap08 {
public static void main(String[] args) {
HashMap<String, Snack> map = new HashMap< >();
// key : 과자명, 값 : Snack객체
map.put("오예스", new Snack("초코맛", 1500));
map.put("새우깡", new Snack("매운맛", 1200));
map.put("자가비", new Snack("감자맛", 2000));
map.put("오잉", new Snack("해물맛", 1600));
System.out.println(map);
map.put("새우깡", new Snack("새우맛", 1000));
System.out.println(map);
TreeMap<String, Integer> treeMap = new TreeMap<>();
treeMap.put("foever", 70);
treeMap.put("baby", 2);
treeMap.put("dog", 30);
treeMap.put("apple", 50);
treeMap.put("cat", 65);
treeMap.put("eleven", 40);
treeMap.put("guess", 70);
NavigableMap ns = (NavigableMap)treeMap.subMap("c", "g");
System.out.println(ns);
System.out.println(treeMap.subMap("c", "g"));
TreeMap<Integer, String> tMap = new TreeMap<>();
tMap.put(89, "마리오");
tMap.put(66, "루이지");
tMap.put(78, "톳텐");
tMap.put(90, "키노피오");
tMap.put(85, "요시");
Map.Entry<Integer, String> entry = tMap.firstEntry(); // 가장 낮은 점수
System.out.println("가장 낮은 점수 : " + entry);
// key만 얻어올 때 : entry.getKey( ), // 값만 얻어올 때 : entry.getValue( )
System.out.println("가장 높은 점수 : " + tMap.lastEntry());
System.out.println("100점 아래 점수 : " + tMap.lowerEntry(100));
System.out.println("78점 위 점수 : " + tMap.higherEntry(78));
System.out.println("78점과 동일한 점수 아니면 바로 아래 점수 : " + tMap.floorEntry(78));
System.out.println("90점과 동일한 점수 아니면 바로 위의 점수 : " + tMap.ceilingEntry(90));
System.out.println("70점과 동일한 점수 아니면 바로 아래 점수 : " + tMap.floorEntry(70));
System.out.println("88점과 동일한 점수 아니면 바로 위의 점수 : " + tMap.ceilingEntry(88));
}
}
예제 1 - 출력결과 )
'Java' 카테고리의 다른 글
[인프런] 클래스가 필요한 이유와 클래스 도입 (0) | 2024.05.20 |
---|---|
문자열 포함 여부 확인 ( contains , containsIgnoreCase ) (0) | 2024.05.01 |
Java 문법) 컬렉션 프레임워크 - Set 컬렉션 (0) | 2023.11.03 |
Java 문법) 컬렉션 프레임워크 - List 컬렉션 (0) | 2023.11.03 |
Java 문법 ) Object클래스 - getClass (0) | 2023.11.02 |