hyeonga_code
Java의 신2_Chapter 6_Collection Map 본문
2024.04.02
- 맵_Map
-- 키-값으로 이루어져있다.
-- 키 값은 중복이 불가능하다. (고유)
-- 값은 중복될 수 있다.
-- 메소드
V put(K key, V value)
// 키를 갖는 값을 저장
void putAll(Map<? extends K, ? extends V> m)
// 매개변수로 넘어온 Map의 모든 데이터를 저장
V get(Object key)
// 키에 해당하는 값을 리턴
V remove(Object key)
// 키에 해당하는 값을 리턴하며 Map에서 삭제
Set<K> keySet()
// 키의 목록을 Set 타입으로 리턴
Collection<V> values()
// 값의 목록을 Collection 타입으로 리턴
Set<Map.Entry<K, V>> entrySet()
// Map 안에 Entry 타입의 Set을 리턴
int size()
// Map의 크기를 리턴
void clear()
// Map의 내용을 삭제
- HashMap
java.lang.Object
ㄴ java.util.AbstractMap<K, V>
ㄴ java.util.HashMap<K, V>
- Serializable // 원격으로 객체를 전송하거나 파일에 저장할 수 있음을 지정
- Cloneable // Object 클래스의 clone() 메소드가 제대로 수행될 수 있음을 지정
- Map<E> // 맵의 기본 메소드 지정
-- 생성자
HashMap()
// 16개의 저장 공간을 가지는 HashMap 객체를 생성
HashMap(int initialCapacity)
// 매개변수 만큼의 저장 공간을 가지는 HashMap 객체 생성
HashMap(int initialCapacity, float loadFactor)
// 매개변수 만큼의 저장 공간을 가지고 로드 팩터를 가지는 HashMap 객체 생성
HashMap(Map<? extends K, ? extends V> m)
// 매개변수로 넘어온 Map을 구현한 객체에 있는 데이터를 가지는 HashMap 객체 생성
---- 매개변수가 없는 생성자를 기본으로 사용한다.
---- 담을 데이터가 많은 경우 초기에 크기를 지정해주는 것이 좋다.
---- Key 값
------ 기본 자료형과 참조 자료형 모두 될 수 있다. (int, long, String을 주로 사용)
------ 직접 생성한 클래스로 사용하는 경우 Object 클래스의 hashCode(), equals() 메소드를 구현하는 것이 중요
---- HashMap에 객체가 들어가는 경우 hashCode(0 메소드의 결과 값에 따른 버켓_Bucket 목록 바구니가 생성된다.
------ get() 메소드 호출시 hashCode()의 결과를 확인한 후 버켓에 들어간 데이터가 여러 개인 경우 equals() 메소드를 호출하여 동일한 값을 찾게 된다.
> java map bucket 심화
-- 값 담기
package collect.map;
import java.util.HashMap;
public class MapSample {
public static void main(String[] args) {
MapSample sample = new MapSample();
sample.checkHashMap();
} //end main()
public void checkHashMap() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "a");
System.out.println(map.get("A")); // a
System.out.println(map.get("B")); // null
map.put("A", "b");
System.out.println(map.get("A")); // b
} //end checkHashMap()
} //end class
---- Map에서 존재하지 않는 키로 값을 조회하는 경우 null을 리턴
------ Collection에서 해당 위치에 값이 없는 경우 ArratIndexOfOutOfBoundsException 예외가 발생
---- 이미 존재하는 키로 값을 넣는 경우 기존의 값을 새로운 값으로 대치
-- 키 목록 확인하기
import java.util.Set;
public void checkKeySet() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "a");
map.put("B", "b");
map.put("C", "c");
Set<String> keySet = map.keySet();
for(String key: keySet) {
System.out.print(key + ":" + map.get(key) + " "); // A:a B:b C:c
}
} //end checkKeySet()
---- 순서는 뒤죽박죽으로 나온다.
---- Set : 데이터가 중복되지 않는 것이 중요
---- Map : 키가 중복되지 않는 것이 중요
-- 값 확인하기
import java.util.Collection;
import java.util.Map.Entry;
import java.util.Set;
public void checkValue() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "a");
map.put("B", "b");
map.put("C", "c");
// .values()
Collection<String> values = map.values();
for(String value: values) {
System.out.print(value + " "); // a b c
} //end for
// .entrySet()
Set<Map.Entry<String, String>> entries = map.entrySet();
for(Map.Entry<String, String> entry : entries) {
System.out.print(entry.getKey() + ":" + entry.getValue() + " "); // A:a B:b C:c
} //end for
} //end checkValue()
---- entrySet() 메소드는 Entry 타입을 가지는 Set 타입으로 리턴
-- 값 존재 확인
public void checkContains() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "a");
map.put("B", "b");
map.put("C", "c");
System.out.println(map.containsKey("A")); // true
System.out.println(map.containsKey("Z")); // false
System.out.println(map.containsValue("b")); // true
System.out.println(map.containsValue("z")); // false
} //end checkContains()
-- 데이터 삭제
public void checkRemove() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "a");
map.remove("A");
System.out.println(map.size()); //0
} //end checkRemove()
-- TreeMap
---- 데이터를 저장하며 키를 기준으로 정렬한다.
---- 숫자 > 알파벳 대문자 > 알파벳 소문자 > 한글 (String 문자열이 저장되는 순서)
------ 객체나 숫자가 저장되는 경우 순서가 달라진다.
package collect.map;
import java.util.*;
public class TreeMapSample {
public static void main(String[] args) {
TreeMapSample sample = new TreeMapSample();
sample.checkTreeMap();
} //end main()
public void checkTreeMap() {
TreeMap<String, String> map = new TreeMap<String, String>();
map.put("A", "a");
map.put("가", "e");
map.put("1", "f");
map.put("a", "g");
Set<Map<Entry<String, String>> entries = map.entrySet();
for(Map<Entry<String, String>> entry: entries) {
System.out.print(entry.getKey() + ":" + entry.getValue() + " "); // 1:f A:a a:g 가:e
}
} //end checkTreeMap()
} //end class
---- 100 건에서 1,000 건 사이의 데이터를 처리해야 하는 경우 HashMap보다 효율적이다.
---- SortedMap 인터페이스를 구현했기 때문에 정렬이 가능하다.
---- SortedMap 메소드
firstKey()
// 첫 번째 키
lastKey()
// 마지막 키
higherKey()
// 특정 키 뒤에 있는 키
lowerKey()
// 특정 키 앞에 있는 키
-- Map을 구현한 Properties 클래스
---- Hashtable을 확장한 클래스로 Map 인터페이스에서 제공하는 모든 메소드를 사용할 수 있다.
---- System 클래스의 getProperties() static 메소드를 호출하면 Properties 타입의 객체를 리턴
public void checkProperties() {
Properties prop = System.getProperties();
Set<Object> keySet = prop.keySet();
for(Object obj: keySet) {
System.out.println( obj + " : " + prop.get(obj));
/*
java.specification.version:11
java.class.path:.
jdk.debug:release
user.language:ko
java.specification.vendor:Oracle Corporation
java.vm.compressedOopsMode:32-bit
java.runtime.version:11.0.20+9-LTS-256
java.runtime.name:Java(TM) SE Runtime Environment
...
*/
}
} //end checkProperties()
---- 자주 사용하는 속성
user.language // 사용자의 사용 언어
user.dir // 현재 사용중인 기본 디렉터리
user.home // 사용자 계정의 홈 디렉터리
java.io.tmpdir // 자바에서 사용하는 임시 디렉터리
file.encoding // 파일의 기본 인코딩
sun.io.unidoce.encoing // 유니코드 인코딩
path.separator // 경로 구분자
file.separator // 파일 구분자
line.seperator // 줄 구분자
-- 메소드
void loat(InputStream inStream)
void load(Reader reader)
// 파일에서 속성을 읽어오기
void loadFromXML(InputStrem in)
// XML로 되어 잇는 속성을 읽어오기
void store(OutputSteam out, String comments)
void store(Writer writer, String comments)
// 파일에 속성을 저장
void stroeToXML(OutputStream os, String comment)
void storeToXML(OutputStream os, String comment, String encoding)
// XML에로 구성되는 속성 파일을 생성
---- comments
------ 저장되는 속성 파일에 주석으로 저장된다.
---- XML_eXtensible Markup Language
------ 태그로 구성되어 있는 텍스트 문서
'Java' 카테고리의 다른 글
Java의 신2_Chapter 8_I/O (0) | 2024.04.03 |
---|---|
Java의 신2_Chapter 7_Thread (0) | 2024.04.03 |
Java의 신2_Chapter 5_Collection Set Queue (0) | 2024.04.02 |
Java의 신2_Chapter 4_Collection List (0) | 2024.04.02 |
Java의 신2_Chapter 3_Generic (0) | 2024.04.02 |