목차 | |
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));
}
}
}
▷ 출력
▣ 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);
}
}
▷ 출력
▣ 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));
}
}
}
▷ 출력
2. TreeSet
■ 이론
▣ 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());
}
}
▷ 출력
▣ 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));
}
}
▷ 출력
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');
}
}
▷ 출력
'Java' 카테고리의 다른 글
Java 기초(File)- AWS 풀스택 과정 55일차 (0) | 2024.10.14 |
---|---|
Java 기초(Generics, lambda)- AWS 풀스택 과정 54일차 (0) | 2024.10.11 |
Java 기초(polymorphism)- AWS 풀스택 과정 52일차 (10) | 2024.10.08 |
Java 기초(polymorphism)- AWS 풀스택 과정 51일차 (4) | 2024.10.07 |
Java 기초(실습)- AWS 풀스택 과정 50일차 (3) | 2024.10.04 |