properties가 json 과 유사하다.
package ch15_collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/*collection Framework(컬렉션 프레임워크) 3가지 인터페이스의 종류 & 종류별 특징
-3가지 인터페이스
-List : 순서유지, 중복허용 예)대기자 List - 구현클래스 ArrayList, Vector, LinkedList....
-Set : 순서유지X, 중복허용X 예) 반려동물 목록, 우리집에 물건 목록 등등 - 구현클래스 HashSet, TreeSet
-Map : Key와 value가 한 pair - 구현클래스 HashMap, HashTable, LinkedHashMap, Properties, TreeMap
key는 중복허용X
value는 중복허용
*/
//제너릭 p.655, p.743코드
public class HashMap01_p743 {
public static void main(String[] args) {
//클래스명 참조변수 = new 클래스명();
//HashMap map = new HashMap(); 이런식으로 하면 해쉬맵에 관련된 것만 사용가능.
//HashMap()객체 호출하여 Map 생성
//인터페이스명 참조변수 = new 구현클래스();
//Map<String, Integer> map = new HashMap<String, Integer>(); //이 방식으로 해야 폭 넓게 사용 가능!!
//Map map = new HashMap();
//위의코드는 아래와 동일하다.
//Map<Object, Object> map = new HashMap<Object, Object>(); 아무것도 명시 안하면 이렇게 선언되는것과 같다.
//key, value추가 : put(Object key, Object value)
//아래코드처럼 key와 value타입은 Object타입으로 추가가능하다.
Map<Object, Object> map = new HashMap<Object, Object>();
map.put(1, 1); //<Integer, Integer>
map.put(2, 3.14); //<Integer, Double>
map.put(9.9, "홍"); //<Integer, String>
map.put(true, false); //<Boolean, Boolean>
map.put("문자열", new Date());//<String, Date>
//map.get() -->얘는 다양하게 입력하였기 때문에 오브젝트 타입
//Object타입 key가 들어갈 수 있지만 편의상 String
Map<String, Integer> map1 = new HashMap<String, Integer>();
// Map<Object, Integer> map1 = new HashMap<Object, Integer>();
//map1.put("신구", 80.8);
//여기에서는 80.8.은 실수타입.
//즉 실수의 wrapper클래스인 Double타입으로 값을 추가하겠다고 하였지만 위에서 new HashMap<String, Integer>(); 하면서
//값을 Integer. 즉 정수형태의 값만들 저장하겠다고 제한하였기 때문에 Double형태인 실수는 입력할 수 없다.(강제형변환해서 가능은하지만... 좋은 코드가 아니다.)
//The method put(String, Integer) in the type Map<String,Integer> is not applicable for the arguments (String, double)
map1.put("신구", 80);
map1.put("홍길동", 90);
map1.put("동장군", 80); //value 동일
map1.put("홍길동", 100);
//만약 key가 동일하다면 마지막 key가 가진 value로 저장된다.
//여기에서("홍길동", 90)이
// ("홍길동", 100)으로 덮어씌워졌다.
//그래서 get("홍길동")하니 value 100이 출력되었다.
//키가 중복이 되면 마지막 값이 출력... 먼저 입력된 홍길동, 90은 지워져버린다.
System.out.println(map1.get("홍길동")); //100
System.out.println(map1.get("동장군")); //80
//key를 이용하여 value 꺼내기
//key를 알면 get(키 명)
Integer i1 = map1.get("신구");
System.out.println(i1);//80 //얘는 정수만 입력 됐기 때문에 인티저로 뜬다.
int i2 = map1.get("신구");
//Integer타입을 int타입의 변수에 저장 ->언박싱 unBoxing
//unBoxing이란 wrapper 클래스 타입 -> 기본 타입으로 전환
System.out.println(i2);//80
System.out.println("----------------아래는 keySet()이용-------------");
//key를 모르면 모든 key를 꺼내기 => while반복문
//꺼낸 key 각각에 대한 value를 꺼내기
Set<String> keySet = map1.keySet(); //map안에 있는 모든 키 꺼내기 // 원래 오브젝트타입인데 제너릭에 스트링 으로 지정해놔서 스트링 타입이다. 그래서 똑같이 <String> 제너릭 제한 걸어둔다.
Iterator<String> keyIterator = keySet.iterator();//key하나씩 꺼내기 // 똑같이 <String> 제너릭 제한 걸어둔다.
while(keyIterator.hasNext()) { //꺼낼 key가 있는 동안
String key = keyIterator.next();//하나의 key가져오기
//각 각 key에 대한 value꺼내기
//key를 이용하여 value를 꺼내기
//key를 알면 get(키명)
//Integer value = map1.get(key); --> Integer 래퍼클래스로 해도되고 아래처럼 언박싱 된 프리미티브 타입int로 해도된다.
int value = map1.get(key); //위에서 제너릭 걸어서 Integer타입이다. 맵에서 get은 key를 넣으면 value값을 가져온다.
System.out.println(key+":"+value);
}
//객체삭제 remove(키)
map1.remove("동장군");
System.out.println("remove후의 개수 = "+map1.size());
System.out.println("----------------아래는 entrySet()이용-------------");
//객체를 하나씩 처리 entrySet()이용 p.744
//Map.Entry<String, Integer> entrySet = map1.entrySet(); //--->그냥 테스트... 신경 안써도 됨.
Set<Map.Entry<String, Integer>> entrySet = map1.entrySet();
Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
//while문 이용
while(entryIterator.hasNext()) {
Entry<String, Integer> entry = entryIterator.next();
String key = entry.getKey();
//Integer value = entry.getValue(); wrapper 클래스 타입으로 저장
int value = entry.getValue(); //unBoxing해서 기본타입으로 저장
System.out.println(key+":"+value);
}
//향상된 for문 이용. (for-each문을 사용하면 위에 Set<Map.Entry<String, Integer>> entrySet = map1.entrySet(); 굳이 선언 안해도 됨. 변수에 담을거면 써도 되고..)
for (Map.Entry<String, Integer> entry : map1.entrySet()) {
System.out.println("[key]:" + entry.getKey() + ", [value]:" + entry.getValue());
}
//모든 객체 삭제
map1.clear();
System.out.println("clear()후 개수 = "+map1.size());
if(map1.isEmpty()) { //진짜 비어있는지 isEmpty로 확인
System.out.println("비어 있습니다.");
}else {
System.out.println("비어 있지 않습니다.");
}
}
}
'java' 카테고리의 다른 글
22.11.25 java & DB(Oracle) 연동 및 콘솔 출력 (0) | 2023.02.16 |
---|---|
22.11.24 java & DB(Oracle) 연동 (0) | 2023.02.15 |
22.11.15 Collection Framework (0) | 2023.02.15 |
23.02.14 인터페이스의 구현클래스 super (0) | 2023.02.14 |
22.11.14 인터페이스, 컬렉션프레임워크 (0) | 2023.02.13 |