참고

  • T10_MapTest.java
  • T11_PhoneBookTest.java
  • T12_PropertiesTest.java
  • test.properties

Map

  • key값과 value값을 한 쌍으로 관리하는 객체
  • key: 중복을 허용하지 않고 순서가 없다. (Set의 특징)
  • value: 중복 허용 (List의 특징)

Map의 CRUD

Map<String, String> map = new HashMap<>();

C: put(key값, value값)

map.put("name", "홍길동");
map.put("addr", "대전");
map.put("tel", "010-1234-5678");

// map => {name=홍길동, tel=010-1234-5678, addr=대전}

U: put(수정할 key값, 새 value값)

  • 데이터를 저장할 때 key값이 같으면 나중에 입력한 값이 저장된다.
map.put("addr", "서울"); // key값이 중복되니 수정으로 판단하고 수정됨
// map => {name=홍길동, tel=010-1234-5678, addr=서울}

D: remove(삭제할 key값), clear()

map.remove("name");
// map => {tel=010-1234-5678, addr=서울}

R (하나의 키 값): get(key값)

System.out.println("addr = > " + map.get("addr"));
// addr = > 서울

R: (여러 key 값): 방법 4개 있음

방법1 => keySet()메서드 이용하기

  • keySet()메서드 => Map의 key값들만 읽어와 Set형으로 반환한다.
Set<String> keySet = map.keySet();

Iterator<String> it = keySet.iterator();
while(it.hasNext()){
    String key = it.next();
    System.out.println(key + " : " + map.get(key));
}

// 출력 결과
// tel : 010-1234-5678
// addr : 서울

방법 2 => Set형 데이터를 '향상된 for문'을 이용하여 처리한다.

  • Set은 Iterable 인터페이스 구현했기때문에 Iterator 쓸 수 있음
for(String key : keySet){
    System.out.println(key + " : " + map.get(key));
}

// 출력 결과
// tel : 010-1234-5678
// addr : 서울

방법 3 => value값만 읽어와 출력하기 => values()메서드 이용하기

  • 잘 안 쓰임
for(String value : map.values()) {
    System.out.println(value);
}

방법4 => Map의 내부클래스 Entry 활용. 가장 Map스러운 방식! ★

  • Map에는 Entry라는 내부 클래스가 만들어져 있다.
  • 이 Entry 클래스에는 key와 value가 멤버변수로 있다.
  • Map에서 이 Entry클래스들을 Set형식으로 저장하여 관리한다.
  • 참고: Entry는 Map 아니면 쓸 데가 없기 때문에 내부 클래스로 선언함.
// 1. Entry 객체 전체를 가져오기
// 가져온 Entry들은 Set형식으로 되어있다. => entrySet()메서드 이용
Set<Map.Entry<String, String>> mapSet = map.entrySet();

//2. 가져온 Entry 객체들을 순서대로 처리하기 위해서 Iterator 객체 이용
Iterator<Map.Entry<String, String>> entryIt = mapSet.iterator();

while(entryIt.hasNext()) {
    Map.Entry<String, String> entry = entryIt.next();
    
    System.out.println("key값 : " + entry.getKey());
    System.out.println("value값 : " + entry.getValue());
}

// 출력 결과
// key값 : tel
// value값 : 010-1234-5678
// key값 : addr
// value값 : 서울
  • Iterator 말고 foreach로 다시 풀어보기

Properties

  • key와 value값으로 String만 사용할 수 있다.
    • Map보다 축소된 기능의 객체
    • Map은 모든 형태의 객체 데이터를 key와 value값으로 사용 가능
  • 데이터 입출력 메서드 : setProperty(), getProperty()
    • Map은 put(), get()
Properties prop = new Properties();

prop.setProperty("name", "홍길동");
prop.setProperty("tel", "010-1234-5678");
prop.setProperty("addr", "율도국");

String name = prop.getProperty("name");
String tel = prop.getProperty("tel");

// 내용 파일로 저장하기 - properties: 시스템 환경설정, 유저 정보 등 관리 가능한 파일, load해서 사용
prop.store(new FileOutputStream("src/kr/or/ddit/basic/test.properties"), "comment");

test.properties 파일

profile
갈 길이 멀다

0개의 댓글