2023.11.17
map은 배열, list처럼 index대신 key를 이용하여 값에 접근하는 자료구조다.
[ key : value ]
이렇게 1 : 1 맵핑되어 저장한다.
이때 key는 중복되어서는 안되고 value는 중복을 허용한다.
Map을 구현한 클래스는
HashMap( )과 LinkedHashMap( ) 등이 있다.
HashMap( )은 값을 저장할 때 순서대로 저장되지 않으며 LinkedHashMap( )은 순서대로 저장된다.
여러 값을 묶어서 표현하거나 전달해야 하는데
그에 맞는 클래스를 작성하기 번거로울 때(사용빈도가 낮아서)
클래스를 작성하는 대신, Map에 저장하여 한번에 전달하는 용도로도 사용한다.
LinkedHashMap<String, String> map = new LinkedHashMap<>();
// key와 value모두 String타입으로 map을 생성한다는 뜻!
map은 위처럼 key와 value의 자료형을 모두 적어줘야 한다.
put(key, value) : map안에 값을 저장한다.
만약 key가 이미 존재하고 있다면 해당 value를 덮어쓴다.
get(key) : 해당 key에 맞는 value를 반환한다.
존재하지 않는 key를 입력하면 null을 반환한다.
remove(key) : 작성한 key에 해당하는 값을 삭제한다.
출력시 삭제되는 value를 반환한다.
clear( ) : map 전체를 삭제한다.
containsKey(key) : 해당 key를 포함하고 있는지 boolean타입을 반환한다.
containsValue(value) : 해당 value를 포함하고 있는지 boolean타입을 반환한다.
size( ) : map의 길이를 반환한다 (= map에 저장된 데이터 개수를 반환한다)
isEmpty( ) : map이 비어있는지 확인할때 사용한다.
key는 중복이 안되기 때문에 keyset( ) 함수를 이용하여 set으로 만들 수 있다.
Set<String> keyset = map.keySet();
이때 set의 제네릭 타입을 key의 자료형으로 해야 한다.
key와 value의 제네릭 타입이 모두 String이면서 파일에 저장해서 불러올 경우는 properties 타입을 사용할 수도 있다.
Properties pro = new Properties();
// properties타입 pro객체 생성
pro.put("pro1key", "pro1val");
pro.put("pro2key", "pro2val");
pro.put("pro3key", "pro3val");
pro.put("pro4key", "pro4val");
// pro에 값 넣어주기
for (Object k : pro.keySet()) {
Object v = pro.get(k);
System.out.println(k + " : " + v);
}
// map과 동일하게 keySet을 이용하여 set으로 만들 수 있다.
// 향상된 for문을 이용해 내부의 key와 value를 출력할 수 있다.
File f = new File("pro_study.txt");
FileOutputStream fos = new FileOutputStream(f);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
pro.store(osw, "String class Function");
// File(txt)을 생성하여 내부에 객체 pro를 저장
// 맨 아래의 "String class Function"은 txt파일의 위쪽에 적힌다.
pro.txt에 저장된 내용
#String class Function
#Mon Nov 20 01:23:39 KST 2023
pro2key=pro2val
pro1key=pro1val
pro3key=pro3val
pro4key=pro4val