본문 바로가기

국비지원_핀테크

10일차_ [java] Set, Map, Iterator

 

 

 

 

 

 

Set

Set

package set;

import java.util.ArrayList;
import java.util.HashSet;

public class Ex01 {
	public static void main(String[] args) {
		
		HashSet<String> set = new HashSet<>();
		set.add("라면");
		set.add("김밥");
		set.add("순대");
		set.add("라면");
		
		ArrayList<String> arr = new ArrayList<>();
		arr.add("라면");
		arr.add("김밥");
		arr.add("순대");
		arr.add("라면");
		
		// ArrayList 와 차이점 : 중복이 발생되지 않는다, 데이터가 순서대로 저장되지 않는다
		System.out.println(set);	// [김밥, 순대, 라면]
		System.out.println(arr);	// [라면, 김밥, 순대, 라면]
		
	}
}

Set 사용법과 List 와 차이점

package baseball;

import java.util.HashSet;

public class Ex02 {
	public static void main(String[] args) {
		
		HashSet<String> set = new HashSet<>();
		set.add("111");
		set.add("222");
		set.add("333");
		System.out.println("set : " + set); // set : [111, 222, 333]
		set.remove("111");
		System.out.println("삭제 set : " + set); // 삭제 set : [222, 333]
		
	}
}

Set 컬렉션에 자료 추가 및 삭제

package set;

import java.util.ArrayList;
import java.util.Iterator;

public class Ex04 {
	public static void main(String[] args) {
		
		ArrayList<String> arr = new ArrayList<>();
		arr.add("일");
		arr.add("이");
		arr.add("삼");
		System.out.println("arr : " + arr);
		
		/*
		 Interator : 반복자 ( 배열 형식의 데이터로 만든다 )
		 - hasNext : 다음 위치에 값이 있으면 true, 없으면 false 
		 - next : 다음 위치로 이동 후 값을 얻어옴
		 
		 baf : 데이터의 시작을 의미
		 eaf : 데이터의 끝을 의미
		 
		 it => [ baf, 일, 이, 삼, eaf ]
		 */
		Iterator<String> it = arr.iterator();
		System.out.println(it.hasNext()); // baf 값의 다음 값이 존재하는지 여부 확인
		System.out.println(it.next()); // 다음 값인 "일" 로 이동 후 값을 꺼내옴
		System.out.println(it.next()); // 다음 값인 "이" 로 이동 후 값을 꺼내옴
		System.out.println(it.next()); // 다음 값인 "삼" 으로 이동 후 값을 꺼내옴
		System.out.println(it.hasNext()); // 현재 위치에서 다음 값이 존재하는지 여부 확인
										  // 다음 값이 없기 때문에 false 출력
		System.out.println(it.next()); // 다음 값이 없기 때문에 이동할 수 없으며 console 오류 출력
		
	}
}

 

 

Iterator

package set;

import java.util.HashSet;
import java.util.Iterator;

public class Ex05 {
	public static void main(String[] args) {
		
		HashSet<String> set = new HashSet<>();
		set.add("111");
		set.add("222");
		set.add("333");
		
		System.out.println("set : " + set); // set : [111, 222, 333]
		Iterator<String> it;
		it = set.iterator();
		// it 를 Iterator 자료형으로 변경
		// Set 컬렉션은 순서가 존재하지 않는다 ( index 가 존재하지 않는다 )
		// 그러므로 내부의 값에 접근하기 위해 Iterator 컬렉션으로 변경하여 사용한다
		
		// Iterator 컬렉션으로 변경하게 되면
		// it => [ baf, 111, 222, 333, eaf ]
		// 위와 같이 배열의 값의 맨 처음(baf)과 맨 뒤(eaf) 값이 추가된다.
		// 첫 위치는 baf 에서부터 출발하며 .hasNext() 메소드를 사용하여 다음 위치인
		// "111" 의 값이 존재하는지 확인하고
		// .next() 메소드를 사용하여 다음 위치로 이동 및 해당 위치의 값을 출력한다
		
		// 현재 위치에서 다음 값이 존재하지 않을때까지 반복
		while(it.hasNext()) {
			System.out.println(it.next());
			// 111
			// 222
			// 333
		}
		System.out.println("종료!!!");
		
	}
}

Iterator 사용하여 set 의 저장값 출력

( set 에는 순서인 인덱스가 존재하지 않기 때문에 Iterator 컬렉션으로 변환하여 내부의 저장값에 접근한다 )

 

 

 

 

 

 

 

 

 

 

MAP

Map

package map;

import java.util.HashMap;

public class Ex01 {
	public static void main(String[] args) {
		
		HashMap<String, String> map = new HashMap<>();
		map.put("num", "100");
		map.put("name", "홍길동");
		map.put("선풍기", "1000만원");
		System.out.println(map); // {num=100, name=홍길동, 선풍기=1000만원}
		
		// .get(키) 메소드로 해당 키에 대한 값을 가져온다
		System.out.println(map.get("num")); // 100
		System.out.println(map.get("선풍기")); // 1000만원
		System.out.println(map.get("없는 키")); // null
		// 입력한 키가 존재하지 않으면 null 값을 반환한다
		
	}
}

map 사용법

package map;

import java.util.HashMap;

public class Ex02 {
	public static void main(String[] args) {
		
		HashMap<String, Integer> map = new HashMap<>();
		map.put("num", 100);
		map.put("age", 10);
		System.out.println(map); // {num=100, age=10}
		
		// 출력 시 저장값인 Integer 형으로 출력됨
		System.out.println(map.get("num")); // 100
		
		// 출력 값인 Integer 형으로 변수를 지정하여 출력 값을 저장
		int num = map.get("age");
		System.out.println(num); // 10
		
		// 키 값이 있는지 .containsKey() 메소드로 확인
		System.out.println( map.containsKey("age") ); // true
		
		// 저장 값이 있는지 .containsValue() 메소드로 확인
		System.out.println( map.containsValue(2000) ); // false
		
		// 이미 존재하는 키를 입력하면 키가 중복되는 대신
		// 기존 키의 값이 변경됨
		// map 은 키 중복이 불가능, 값은 중복이 가능하다
		map.put("age", 12345);
		System.out.println( map ); // {num=100, age=12345}
		
		// 삭제
		map.remove("age");
		System.out.println( map ); // {num=100}
		
	}
}

map 에 값 추가, 삭제, 값이 있는지 확인

package map;

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

public class Ex03 {
	public static void main(String[] args) {
		
		HashMap<String, String> map = new HashMap<>();
		map.put("이름", "홍길동");
		map.put("나이", "20");
		System.out.println(map); // {이름=홍길동, 나이=20}
		
		// .keySet() : 키만 출력
		System.out.println( "key set : " + map.keySet() ); // key set : [이름, 나이]
		
		// .values() : 값만 출력
		System.out.println( "values : " + map.values() ); // values : [홍길동, 20]
		
		// .keySet() 의 값은 반환 자료형이 Set 이기 때문에 Set 컬렉션 자료형에 담아준다
		Set<String> set = map.keySet();
		System.out.println(set); // [이름, 나이]
		
		// map 의 키를 저장한 set 의 값에 접근하기 위해 Iterator 컬렉션으로 다시 저장
		// it => [ baf, 이름, 나이, eaf ]
		Iterator<String> it = set.iterator();
		for( ; it.hasNext(); ) {
			// System.out.println(it.next());
			// 이름
			// 나이
			
			String key = it.next();
			System.out.println( key + " : " + map.get(key) );
			// 이름 : 홍길동
			// 나이 : 20
		}
		
		System.out.println("종료!!!");
		
	}
}

map 의 키로 값에 접근하는 방법

 

 

 

 

 

 

 

 

 

 

Wrapper Class

Wrapper Class

List, Set, Map 클래스를 사용하는 경우 자바의 기본 자료형을 사용할 수 없으므로

Wrapper Class 를 사용하여 기본 자료형의 값을 저장한다.

package baseball;

import java.util.ArrayList;

public class Ex02 {
	public static void main(String[] args) {
		
		// int 자료형은 List에 담을 수 없음
		// ArrayList<int> arr = new ArrayList<>();
		
		//Wrapper Class 를 사용하여 자바의 기본 자료형을 List, Set, Map 에 담는다 
		ArrayList<Integer> arr = new ArrayList<>();
		
	}
}

 

 

 

 

 

 

 

 

 

 

실습 예제

코드 실행 예시

 

 

실습 풀이

package test;

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

public class test1 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		HashMap<String, Integer> menu = new HashMap<>();
		
		int choice = 0;
		String addMenu = null;
		int addPrice = 0;
		
		while(choice != 3) {
			// 메인 출력
			System.out.print("1. 메뉴 등록\n2. 메뉴별 가격 보기\n3. 종 료\n>>> ");
			choice = sc.nextInt();
			
			// 1. 메뉴 등록
			if(choice == 1) {
				System.out.print("추가할 메뉴 이름 >>> ");
				addMenu = sc.next();
				System.out.print(addMenu + " 가격 >>> ");
				addPrice = sc.nextInt();
				menu.put(addMenu, addPrice);
			}
			
			// 2. 메뉴 출력
			if(choice == 2) {
				// key 를 set 으로 변형 후 바로 iterator 컬렉션으로 변환
				Iterator<String> strMenu = (menu.keySet()).iterator();
				System.out.println("===== 메뉴판 =====");
				// 메뉴 출력
				while(strMenu.hasNext()) {
					String key = strMenu.next();
					System.out.println(key + " : " + menu.get(key));
				}
				System.out.println("=================");
				
				// 가격 수정,메뉴 삭제, 나가기 출력
				System.out.println("1.가격 수정 2.메뉴 삭제 3.나가기");
				int menuEdit = 0;
				System.out.print(">>> ");
				menuEdit = sc.nextInt();
				
				// 가격 수정 구현
				if(menuEdit == 1) {
					System.out.print("가격 수정할 메뉴 입력 >>> ");
					String editName = null;
					editName = sc.next();
					if(menu.containsKey(editName)) {
						System.out.print("수정할 금액 입력 >>> ");
						int editPrice = 0;
						editPrice = sc.nextInt();
						menu.put(editName, editPrice);
						System.out.println(editName + "의 가격을 " + editPrice + "로 변경 완료!!");
					}else {
						System.out.println("해당하는 메뉴가 존재하지 않습니다.");
					}
				}
				
				// 메뉴 삭제 구현
				if(menuEdit == 2) {
					System.out.print("삭제할 메뉴를 입력해주세요 >>> ");
					String removeMenu = null;
					removeMenu = sc.next();
					if(menu.containsKey(removeMenu)) {
						menu.remove(removeMenu);
						System.out.println(removeMenu + "가 삭제되었습니다.");
					}else {
						System.out.println("해당 메뉴가 존재하지 않습니다.");
					}
				}
				
			}
			
		}
		System.out.println("프로그램을 종료합니다.");
		
	}
}

- 이해해야할 부분 -

메뉴를 출력하는 부분에서 map 컬렉션에 저장된 key 를 추출할때 map 컬렉션의 .keySet() 메소드를 사용하여 key 를 반환받게 되는데 이때 .keySet() 메소드의 반환 값이 set 컬렉션이므로( 순서가 없기 때문에 index 도 존재하지 않아서 저장 값에 접근할 수 없음 ) 이 값을 다시 iterator 컬렉션으로 변환하여 key 에 접근할 수 있게 변환한 뒤 key 들을 변수로 저장하여 사용한다

728x90