학원에서 학습한 내용을 개인정리한 글입니다.
//map interface
//변수명 key = 값 value
//기본타입: key(Object): value(Object)
Map m = new HashMap();
HashMap m2= new HashMap();
//key: value 한번에 저장해야함
//use put() method
m.put("반장", "OAO");
m.put("선생", "OMO");
m.put("돈까스", new Food("돈까스", 3000, "한식", 4));
//get("key") 메소드 이용
Object o = m.get("선생");
System.out.println(o);
System.out.println(m.get("반장"));
System.out.println(m.get("돈까스"));
//데이터 수 확인하기
//size();
System.out.println(m.size());
//데이터 삭제하기
//remove(key)
m.remove("선생");
System.out.println(m);
//중복키를 저장하면 기존값을 덮어쓰기함
m.put("반장", new Food("두반장", 3000, "중식", 2));
System.out.println(m);
m.put("양식", new Food("돈까스", 3000, "한식", 4));
System.out.println(m);
//ContainsKey(key): map에 저장된 key가 있는지
//value가 있는지 확인하는 메소드
//containsValue(value): map에 저장된 value가 있는지
//반환형: boolean
System.out.println(m.containsKey("돈까스"));
System.out.println(m.containsValue(new Food("돈까스", 3000, "한식", 4)));
m.put("names", new ArrayList());
System.out.println(m);
((ArrayList)m.get("names")).add("OWO");
((ArrayList)m.get("names")).add("OIO");
((ArrayList)m.get("names")).add("OMO");
for(Object o1:(ArrayList)m.get("names")) {
System.out.println(o1);
}
List l = new ArrayList();
l.add(new HashMap());
((Map)l.get(0)).put("name", "OJO");
System.out.println(l);
System.out.println("mmmmmmmmmmmmmmmmmmm");
//전체 데이터를 순회
//key로 value를 가져온다
//1. Key데이터를 전체 가져옴
Set keys = m.keySet();
Iterator it = keys.iterator();
while(it.hasNext()) {
Object k = (String)it.next();
System.out.println(k + " : " + m.get(k));
}
for(Object k : keys) {
System.out.println(k + " : " + m.get(k));
}
keys.forEach(k -> System.out.println(k + " : " + m.get(k)));
//2. Key:Value 쌍을 가져옴 -> Map.entry 객체
//entrySet()
Set entry = m.entrySet();
Iterator it2 = entry.iterator();
while(it2.hasNext()) {
Map.Entry all = (Map.Entry)it2.next();
Object key = all.getKey();
Object value = all.getValue();
System.out.println(key + " : " + value);
}
public static void mapTest() {
Map m = new HashMap();
m.put("구운감자", new Snack("구운감자", 1200, "스틱", "감자"));
m.put("포테토칩", new Snack("포테토칩", 2300, "칩", "어니언"));
m.put("홈런볼", new Snack("홈런볼", 2500, "슈", "초코"));
m.put("새우깡", new Snack("새우깡", 1400, "깡", "새우"));
m.put("고래밥", new Snack("고래밥", 1000, "밥", "바베큐"));
Set keys = m.keySet();
Iterator it = keys.iterator();
while(it.hasNext()) {
Object key = (String)it.next();
System.out.println(key + " : " + m.get(key));
}
Set entry = m.entrySet();
Iterator it2 = entry.iterator();
while(it2.hasNext()) {
Map.Entry all = (Map.Entry)it2.next();
Object value = all.getValue();
Snack s = (Snack)value;
System.out.println("[" +all.getKey() + "]" + " 이름:" + s.getName() + "|가격:" + s.getPrice());
}
}
//Map forEach Method
m.forEach((k,v) -> System.out.println(k + " : " + v));
//추가 메소드 8버전 이상에서 사용가능
//getOrDefault()
Snack s = (Snack)m.getOrDefault("사또밥", new Snack());
System.out.println(s);
//computeIfAbsent(key, Function Interface): key가 없으면 Function Interface 실행
//public R fun(E); -> 반환되는 값을 Map에 추가, Key 있으면 function 실행 안함
// m.computeIfAbsent("고래밥", (o2) -> new Snack());
m.computeIfAbsent("사또밥", (o2) -> {
System.out.println(o2);
Snack s1 = new Snack();
s1.setName((String)o2);
return s1;
});
//매개변수 인자는 첫번째 매개변수 값을 저장
m.forEach((k,v) -> System.out.println(k + " " + v));
//computeIfPresent("key, (k,v) -> return Object) :
//key가 있으면 인터페이스 실행 -> key 값을 변경할 때
m.computeIfPresent("고래밥", (k,v) -> new Snack());
System.out.println(m);
//반환값을 Null하면 삭제됨
m.computeIfPresent("고래밥", (k,v) -> {
return null;
});
m.forEach((k,v) -> System.out.println(k + " " + v));
//Map.of()메소드 이용
// of로 생성시 Null값 저장 불가
String v = "값";
m = Map.of(1, "1111", 2, "2222", 3, "3333", 4, v);
System.out.println(m);
m.put(4, "4444");
//Treemap
TreeMap tm = new TreeMap();
tm.put(1, new Snack("짱구", 1200, "링", "깨"));
tm.put(2, m.get("포테토칩"));
tm.put(3, m.get("홈런볼"));
System.out.println(tm);
//set 활용하기
//중복값을 저장하지 않는 자료형
// -> equals, hashCode가 재정의되어있어야함
//순서가 없음, 데이터를 지칭하는 값이 없음(Iterator 이용)
//HashSet,TreeSet,LinkedHashSet
//Map과 Collection 호환하기
//Values() Method 를 이용하여 Map의 value값을 Collection에 저장할 수 있음
Collection c = m.values();
ArrayList list = new ArrayList(c);
Set set = new HashSet(c);
System.out.println(list);
System.out.println(set);
//DB Table에 있는 데이터를 저장할 때 Map을 사용
Map row = new HashMap();
row.put("memberId", "admin");
row.put("memberPwd", "1234");
row.put("memberName", "aa");
row.put("memberAge", 19);
Map row2 = new HashMap();
row2.put("memberId", "user01");
row2.put("memberPwd", "1234");
row2.put("memberName", "bb");
row2.put("memberAge", 24);
List table = new ArrayList();
table.add(row);
table.add(row2);
💡
Temi: 제네릭 타입은 새로 할당해줄때마다 새로운 타입을 넣어줄수있는거면 이전 싱글톤 예제처럼 사용할순없는건지?
Teacher: 상관X 각자 별개로 존재한다고 생각