41일 차 - HashMap (해시맵) (23.02.22)

yvonne·2023년 2월 22일
0

📂Java

목록 보기
42/51
post-thumbnail

1. 프로그래밍 하시오.

나라 이름과 인구를 입력하세요.(: Korea 5000)
나라 이름, 인구 >> Korea 5000
나라 이름, 인구 >> USA 1000000
나라 이름, 인구 >> Swiss 2000
나라 이름, 인구 >> France 3000
나라 이름, 인구 >> 그만

인구 검색 >> France
France의 인구는 3000
인구 검색 >> 스위스
스위스 나라는 없습니다.
인구 검색 >> 그만

package wrap;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class mapTest2 {

	public static void main(String[] args) {
		HashMap<String, Integer> map = new HashMap<>();
		Scanner sc = new Scanner(System.in);
		System.out.println("나라 이름과 인구를 입력하세요. (예: Korea, 5000)");

		while (true) {
			System.out.print("나라 이름, 인구>>");

			String k = sc.next();
			if (k.equals("그만")) {
				break;
			} else {
				int v;
				try {
					v = sc.nextInt();
				} catch (Exception e) {
					System.out.println("숫자가 아닙니다.");
					sc.next();
					continue;
				}
				map.put(k, v);
				Set<String> ks = map.keySet();
			}
		}

		while (true) {
			System.out.print("인구 검색>>");
			String ks = sc.next();
			if (ks.equals("그만")) {
				System.out.println("종료");
				break;
			} else if (map.get(ks) == null) {
				System.out.println("나라가 없습니다.");
			} else {
				System.out.println(ks + "의 인구는 " + map.get(ks));

			}
		}

	}
}
  • 출력결과




2. 프로그래밍 하시오.

도시 이름, 위도, 경도 정보를 가진 Location 클래스를 작성하고, 
도시 이름을 '키'로 하는 HashMap<String, Location> 컬렉션을 만들고, 
사용자로부터 입력 받아 4개의 도시를 저장하라. 그리고 도시 이름으로 검색하는 프로그램을 작성하라.

----------------------------------

도시, 경도, 위도를 입력하세요.

\>> 서울, 37, 126
\>> LA, 34, -118
\>> 파리, 2, 48
\>> 시드니, 151, -33

----------------------------------
서울 37 126
LA 34 -118
파리 2 48
시드니 151 -33

----------------------------------
도시 이름 >> 피리
피리는 없습니다.
도시 이름 >> 파리
파리 2 48
도시 이름 >> 그만





3. 큐와 스택에 대하여 설명하시오.⭐️






4. Map에 대하여 설명하시오.

📌Map: HashMap, TreeMap 등등이 있다.

  • 기본적으로 Key-Value 로 들어감! map.put(key, value);

  • Map은 Collection 아니다. set의 성질도, list의 성질도 개념들이 합쳐져야 하기 때문!

📌Key: key를 통해서 다른 요소(value)를 구분 짓는다. (현실의 키 개념과 같다고 생각!)

  • 앞에 키는 중복이 되면 안된다. (c#의 dictionary 의 개념)
map.put(23, "Marthin");**map.put(23, "Lee");**

- 같은 키를 중복 입력하면 뒤의 것으로 키 값이 바뀐다.
입력 map.put(45, "Brown"); 
출력 map.get(37); 
삭제 map.remove(37);
  • 예제 소스 코드

💡HashMap<K, V>

  • HashMap<K, V> 클래스는 Iterable 인터페이스를 구현하지 않아서 for-each ,Iterator로 순차적 접근을 할 수 없다.

  • 그래서 Key는 Set으로 관리! 키값을 기준으로 for-each, Iterator 사용함

public Set ks = map.keySet();
→ set 호출 메소드 / Key만 담고 있는 컬렉션 인스턴스 생성

💡TreeMap<K, V>

  • Tree 자료구조 특성상 반복자가 정렬된 순서대로 key들에 접근함
    (반복자의 접근 순서는 컬렉션 인스턴스에 따라 달라질 수 있다.)




5. 아래의 TreeMap의 Value를 확인 하기 위한 소스를 짜시오.⭐️

TreeMap<Integer, String> map = new TreeMap<>();
map.put(45, "Brown");
map.put(37, "James");
map.put(23, "Martin");

package wrap;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;

public class mapTest {

	public static void main(String[] args) {
		HashMap<Integer, String> map = new HashMap<>();
		map.put(45, "Brown");
		map.put(37, "James");
		map.put(23, "Martin");

		Set<Integer> ks = map.keySet();

		for (Integer n : ks)
			System.out.print(n.toString() + '\t');
		System.out.println();

		for (Integer n : ks)
			System.out.print(map.get(n).toString() + '\t');
		System.out.println();

		for (Iterator<Integer> itr = ks.iterator(); itr.hasNext();)
			System.out.print(map.get(itr.next()) + '\t');
		System.out.println();
		System.out.println();

		System.out.println("23번:" + map.get(23));
		System.out.println("37번:" + map.get(37));
		System.out.println("45번:" + map.get(45));
		System.out.println();

		map.remove(37);

		System.out.println("37번:" + map.get(37));

	}

}

  • 출력결과
profile
개발 연습장

0개의 댓글