Java

Java 기초(map)- AWS 풀스택 과정 53일차

awspspgh 2024. 10. 10. 18:08
목차
1. map
2. TreeSet
3. 실습

 

1. map

▣ Map01

package day08;

import java.util.HashMap;
import java.util.Iterator;

public class Map01 {

	public static void main(String[] args) {
		/* Map
		 * - 값을 2개 쌍으로 저장. key / value
		 * - key : 중복불가능, value : 중복가능
		 * - key가 index 대용
		 * - index가 없으면 정렬X, 중복X
		 * - HashMap을 가장 많이 사용
		 * 홍길동 70
		 * 김영이 87
		 * Map<클래스, 클래스> map = new HashMap<클래스, 클래스>();
		 * map은 값이 2개이기 때문에 향상된 for문 / iterator 사용불가
		 * map => key만 분리 후 set으로 구성 후 출력
		 * 
		 * list, set => add() : 추가
		 * map => put() : 추가
		 * keySet() : 키를 기준으로 값을 가져오는 것이 가능
		 * get(key) : key에 해당하는 value를 리턴
		 */
		
		HashMap<String, Integer> map = new HashMap<>();
		map.put("길동", 80);
		map.put("순이", 89);
		map.put("철수", 68);
		map.put("영철", 58);
		map.put("영이", 78);
		System.out.println(map);
		System.out.println(map.keySet());
		System.out.println(map.values());
		
		// - get(key) : value 리턴
		String name = "길동";
		System.out.println(map.get(name));
		System.out.println(map.get("영이"));
		
		// - remove(Object) : key의 값을 삭제하면서 value를 리턴
		System.out.println(map.remove(name));
		System.out.println(map);
		System.out.println(map.remove("영이", 78)); // true / false
		System.out.println(map);
		System.out.println(map.remove(name)); // null
		System.out.println(map);
		
		int sum = 0;
		
		for(String key : map.keySet()) {
			sum += map.get(key);
			System.out.println(key+" : " + map.get(key));
		}
		
		System.out.println(sum);
		System.out.println("--------------------------");
		// iterator 출력
		Iterator<String> it = map.keySet().iterator();
		while(it.hasNext()) {
			String key = it.next();
			System.out.println(key+" : " + map.get(key));
		}

	}

}

 

▷ 출력

출력 (1)

 

▣ Map02

package day08;

import java.util.HashMap;
import java.util.Scanner;

public class Map02 {

	public static void main(String[] args) {
		/* 과목과 점수를 입력받아(Scanner) map에 저장 후 출력
		 * 합계, 평균 출력
		 * 종료 키워드가 나올 때까지 반복 (1 = 계속, 0 = 종료)
		 * 과목 / 점수 입력 > 국어 78
		 * 1 = 계속, 0 = 종료 > 1
		 * 영어 98
		 * ... 반복
		 */
		
		Scanner scan = new Scanner(System.in);
		HashMap<String, Integer> map = new HashMap<>();
		double cnt = 0;
		int isActive = 1;
		String subject = "";
		int score = 0;
		int sum = 0;
		double avg = 0;
		
		do {
			System.out.println("1 = 계속, 0 = 종료 >");
			isActive = scan.nextInt();
			if(isActive == 1) {
				System.out.println("과목 / 점수 입력 >");
				subject = scan.next();
				score = scan.nextInt();
				map.put(subject, score);
				System.out.println(subject + " " + score);
				sum += score;
				cnt++;
			}else if(isActive != 0){
				System.out.println("잘못 입력되었습니다.");
			}
		}while(isActive != 0);
		avg = sum / cnt;
		System.out.println("합계 : " + sum + " 평균 : " + avg);
        
	}

}

 

▷ 출력

출력 (2)

 

▣ MapEx01

package day08;

import java.util.HashMap;
import java.util.Scanner;

public class MapEx01 {

	public static void main(String[] args) {
		/* 단어장
		 * 단어 5개를 입력받아 콘솔에 출력하는 기능
		 * -- 단어장 --
		 * hello : 안녕
		 * apple : 사과
		 * orange : 오렌지
		 * map 저장 후 출력
		 */

		Scanner scan = new Scanner(System.in);
		HashMap<String, String> map = new HashMap<>();
		
		int size = 0;
		String Eng = "";
		String Kor = "";
		
		do {
			size++;
			System.out.println("영단어 >");
			// 공백허용 scan.nextLine(); => enter 완료 + 값
			// enter 콘솔입력 시 완료
			// nextLine() : enter값으로 인지하는 케이스는
			// 다른 입력값 -> nextLine()이 오는 케이스
			Eng = scan.nextLine();
			System.out.println("뜻 >");
			Kor = scan.next();
			scan.nextLine(); // 완료의 enter 처리할 수 있는 값
			map.put(Eng, Kor);
			System.out.println(Eng + " : " + Kor);
		}while(size != 5);
		
		System.out.println("-- 단어장 --");
		for(String key : map.keySet()) {
			System.out.println(key + " : " + map.get(key));
		}
		
	}

}

 

▷ 출력

출력 (3)

 

2. TreeSet

■ 이론

TreeSet (1)

 

▣ TreeSet01

package day08;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

public class TreeSet01 {

	public static void main(String[] args) {
		// 정렬이 가능한 Set
		// 중앙 노드를 기준으로 작은 값이 들어오면 left, 큰 값이 들어오면 right
		// TreeSet을 이용하여 Lotto 번호 6개를 랜덤으로 넣기
		
		TreeSet<Integer> set = new TreeSet<>();
		Set<Integer> set2 = new HashSet<>();
		
		for(int i = 0; set.size() < 6; i++) {
			int num = new Random().nextInt(45)+1;
			set.add(num);
			set2.add(num);
		}
		System.out.println("--TreeSet--");
		System.out.println(set);
		System.out.println("--HashSet--");
		System.out.println(set2);

		// first() / last() : TreeSet의 가장 앞에 있는 값 / 가장 뒤에 있는 값 추출
		System.out.println(set.first());
		// System.out.println(set2.first()); // error 없음
		System.out.println(set.last());
		
	}

}

 

▷ 출력

출력 (1)

 

▣ TreeSet02

package day08;

import java.util.TreeSet;

public class TreeSet02 {

	public static void main(String[] args) {
		
		int[] score = {80,79,85,46,35,84,75,96,82};
		
		TreeSet<Integer> set = new TreeSet<Integer>();
		for(int s : score) {
			set.add(s);
		}
		System.out.println(set);
		
		// headSet(value) : value보다 작은 값 
		// tailSet(value) : value보다 큰 값
		System.out.println();
		System.out.println(set.headSet(70));
		System.out.println(set.tailSet(70));

	}

}

 

▷ 출력

출력 (2)

 

3. 실습

▣ WordMain

package day08;

import java.util.Scanner;

public class WordMain {

	public static void main(String[] args) {
		/* 단어장 프로그램 작성
		 * menu
		 * 1.단어등록|2.단어검색|3.단어수정|4.단어출력|5.단어삭제|6.종료
		 * WordController 메서드 구현
		 * map을 이용하여 단어 등록
		 * 기본 단어 등록(5가지 등록)
		 * main에서 메뉴 반복처리
		 */
		
		WordController wordController = new WordController();
		Scanner scan = new Scanner(System.in);
		int menu = 0;
		
		do {
			System.out.println("1.단어등록|2.단어검색|3.단어수정|4.단어출력|5.단어삭제|6.종료");
			System.out.println("menu >");
			menu = scan.nextInt();
			
			switch(menu) {
			case 1:
				wordController.insertWord(scan);
				break;
			case 2:
				wordController.searchWord(scan);
				break;
			case 3:
				wordController.modifyWord(scan);
				break;
			case 4:
				wordController.printWord(scan);
				break;
			case 5:
				wordController.deleteWord(scan);
				break;
			case 6:
				System.out.println("단어장을 종료합니다.");
				break;
			default:
				System.out.println("잘못된 메뉴입니다.");
			}
		}while(menu != 6);
		
		scan.close();
		
	}

}

 

▣ WordController

package day08;

import java.util.HashMap;
import java.util.Scanner;

public class WordController {

		private HashMap<String, String> map = new HashMap<>();
		
	public void insertWord(Scanner scan) {
		char isActive = 'y';
		String word = "";
		String mean = "";

		do {
			map.put("hello", "안녕");
			map.put("apple", "사과");
			map.put("cat", "고양이");

			if(isActive == 'y') {
				System.out.println("단어 >");
				scan.nextLine();
				word = scan.nextLine();
				System.out.println("의미 >");
				mean = scan.next();
				if(word != null && mean != null) {
					map.put(word, mean);
				}else {
					System.out.println("빈 값이 있습니다.");
				}
			}else {
				if(isActive == 'n') {
					System.out.println("단어 등록을 종료합니다.");
				}else {
					System.out.println("y 또는 n만 가능합니다.");
				}
			}
			System.out.println("단어를 등록하시겠습니까? (y/n) >");
			isActive = scan.next().charAt(0);
			
		}while(isActive != 'n');
		
	}
	
	public void searchWord(Scanner scan) {
		char isActive = 'y';
		String word = "";
		int cnt = 0;
		
		do {
			if(isActive == 'y') {
				System.out.println("단어 >");
				scan.nextLine();
				word = scan.nextLine();
				if(word != null) {
					for(String key : map.keySet()) {
						if(key.equals(word)) {
							System.out.println(key + " : " + map.get(key));
						}else {
							cnt++;
							if(cnt == map.size()){
								System.out.println("일치하는 단어가 없습니다.");
							}
						}
					}
				}else {
					System.out.println("빈 값이 있습니다.");
				}
			}else {
				if(isActive == 'n') {
					System.out.println("단어 검색을 종료합니다.");
				}else {
					System.out.println("y 또는 n만 가능합니다.");
				}
			}
			System.out.println("단어를 검색하시겠습니까? (y/n) >");
			isActive = scan.next().charAt(0);
			
		}while(isActive != 'n');
	}
	
	public void modifyWord(Scanner scan) {
		char isActive = 'y';
		String word = "";
		String mean = "";
		int cnt = 0;
		
		do {
			if(isActive == 'y') {
				System.out.println("단어 >");
				scan.nextLine();
				word = scan.nextLine();
				if(word != null) {
					for(String key : map.keySet()) {
						if(key.equals(word)) {
							System.out.println("의미 >");
							mean = scan.nextLine();
							map.put(key, mean);
							System.out.println(key + " 단어의 의미가 수정되었습니다!");
						}else {
							cnt++;
							if(cnt == map.size()){
								System.out.println("일치하는 단어가 없습니다.");
							}
						}
					}
				}else {
					System.out.println("빈 값이 있습니다.");
				}
			}else {
				if(isActive == 'n') {
					System.out.println("단어 수정을 종료합니다.");
				}else {
					System.out.println("y 또는 n만 가능합니다.");
				}
			}
			System.out.println("단어를 수정하시겠습니까? (y/n) >");
			isActive = scan.next().charAt(0);
			
		}while(isActive != 'n');
	}
	
	public void printWord(Scanner scan) {
		for(String key : map.keySet()) {
			System.out.println(key + " : " + map.get(key));
		}
	}
	
	public void deleteWord(Scanner scan) {
		char isActive = 'y';
		String word = "";
		String mean = "";
		int cnt = 0;
		
		do {
			if(isActive == 'y') {
				System.out.println("단어 >");
				scan.nextLine();
				word = scan.nextLine();
				if(word != null) {
					mean = map.remove(word);
					if(mean == null) {
						System.out.println("없는 단어입니다.");
					}else {
						System.out.println(word + " 단어가 삭제되었습니다!");						
					}
						
				}else {
					System.out.println("빈 값이 있습니다.");
				}
			}else {
				if(isActive == 'n') {
					System.out.println("단어 삭제를 종료합니다.");
				}else {
					System.out.println("y 또는 n만 가능합니다.");
				}
			}
			System.out.println("단어를 삭제하시겠습니까? (y/n) >");
			isActive = scan.next().charAt(0);
			
		}while(isActive != 'n');
	}
	
	
}

 

▷ 출력

출력 (1)