hyeonga_code

Java의 신2_Chapter 6_Collection Map 본문

Java

Java의 신2_Chapter 6_Collection Map

hyeonga 2024. 4. 3. 05:59
반응형

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