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
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
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
'국비지원_핀테크' 카테고리의 다른 글
10일차_ [java] 오버로딩 ( overloading ), 변수의 종류 (0) | 2024.02.16 |
---|---|
10일차_ [java] 클래스 ( class ), 접근제한자, 메소드 ( method ) (0) | 2024.02.15 |
9일차_ [java] 컬렉션, 리스트 ( List ) (0) | 2024.02.14 |
9일차_ [java] 난수 ( random ) (0) | 2024.02.14 |
9일차_ [java] 문자열 클래스의 메소드 ( String ) (0) | 2024.02.14 |