참고
- 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");
U: put(수정할 key값, 새 value값)
- 데이터를 저장할 때 key값이 같으면 나중에 입력한 값이 저장된다.
map.put("addr", "서울");
D: remove(삭제할 key값), clear()
map.remove("name");
R (하나의 키 값): get(key값)
System.out.println("addr = > " + map.get("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));
}
방법 2 => Set형 데이터를 '향상된 for문'을 이용하여 처리한다.
- Set은 Iterable 인터페이스 구현했기때문에 Iterator 쓸 수 있음
for(String key : keySet){
System.out.println(key + " : " + map.get(key));
}
방법 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 아니면 쓸 데가 없기 때문에 내부 클래스로 선언함.
Set<Map.Entry<String, String>> mapSet = map.entrySet();
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());
}
- Iterator 말고 foreach로 다시 풀어보기
Properties
- key와 value값으로 String만 사용할 수 있다.
- Map보다 축소된 기능의 객체
- Map은 모든 형태의 객체 데이터를 key와 value값으로 사용 가능
- 데이터 입출력 메서드 : setProperty(), getProperty()
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");
prop.store(new FileOutputStream("src/kr/or/ddit/basic/test.properties"), "comment");
test.properties 파일