[Java #14 / 250325] Map

temi·2025년 3월 28일

Java

목록 보기
14/15

학원에서 학습한 내용을 개인정리한 글입니다.


수업

Map Interface

  • key: value 형식으로 데이터 저장
  • key는 일반적으로 String, Integer로 선언
  • HashMap, TreeMap, Properties
//map interface
//변수명 key = 값 value
//기본타입: key(Object): value(Object)

put()

  • Map 저장소에 값 저장하기
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()

  • map에 저장된 데이터 가져오기
//get("key") 메소드 이용
Object o = m.get("선생");
System.out.println(o);
System.out.println(m.get("반장"));
System.out.println(m.get("돈까스"));

size()

//데이터 수 확인하기
//size();
System.out.println(m.size());

remove()

//데이터 삭제하기
//remove(key)
m.remove("선생");
System.out.println(m);

Key 중복


//중복키를 저장하면 기존값을 덮어쓰기함
m.put("반장", new Food("두반장", 3000, "중식", 2));
System.out.println(m);
m.put("양식", new Food("돈까스", 3000, "한식", 4));
System.out.println(m);

containsKey()

  • Key가 있는지 확인하는 메소드

//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");

keySet()

  • KeySet() 메소드 이용 -> key 값을 set 방식으로 반환함
//전체 데이터를 순회
//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)));

entrySet()

  • Key:Value 쌍을 가져옴
//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);
}	

실습

과자 hashMap으로 set, get

	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());
	}
}

getOrDefault

//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()

//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()

//computeIfPresent("key, (k,v) -> return Object) : 
//key가 있으면 인터페이스 실행 -> key 값을 변경할 때

m.computeIfPresent("고래밥", (k,v) -> new Snack());
System.out.println(m);
  • Return Null = 삭제
//반환값을 Null하면 삭제됨
m.computeIfPresent("고래밥", (k,v) -> {
	return null;
});
m.forEach((k,v) -> System.out.println(k + " " + v));

Map.of()

  • Map 선언과 동시에 초기화

//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
TreeMap tm = new TreeMap();
tm.put(1, new Snack("짱구", 1200, "링", "깨"));
tm.put(2, m.get("포테토칩"));
tm.put(3, m.get("홈런볼"));
System.out.println(tm);

values() Map, Collection 호환

//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);

💡

QNA

Temi: 제네릭 타입은 새로 할당해줄때마다 새로운 타입을 넣어줄수있는거면 이전 싱글톤 예제처럼 사용할순없는건지?

Teacher: 상관X 각자 별개로 존재한다고 생각


profile
250304~

0개의 댓글