package ch04_map;

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

/*
 * HashMap
 * → key, value로 구성.
 * → key값은 중복될 수 없고, value는 중복되어도 상관없음.
 * → 기존에 저장된 key와 동일한 key로 값을 저장하면, 기존값은 없어지고 새로운 값으로 변경.
 */
public class ExHashMap {
	
	public static void main(String[] args) {
		
		//HashMap<String,String> hm = new HashMap<>();
		Map<String,String> hm = new HashMap<>();
		
		// put(key, value) : 데이터 추가
		hm.put("유재석", "안테나");
		hm.put("손흥민", "토트넘");
		hm.put("김연경", "흥국생명");
		//hm.put("유재석", "프리랜서"); → 동일한 key값으로 value를 설정하면 덮어쓰기 됌.
		
		System.out.println(hm);
		
		System.out.println();
		
		// get(key) : value 데이터 가져오기
		System.out.println("손흥민 소속 : " + hm.get("손흥민"));
		
		System.out.println();
		
		// iterator -> key 값 set으로 처리되어있음.
		Set<String> ks = hm.keySet(); // set 생성 : key값만을 모아서 생성해놓은 keySet()
		Iterator<String> it = ks.iterator(); // set을 돌아다닐 반복자 생성.
		while(it.hasNext()) {
			String key = it.next();
			String value = hm.get(key);
			System.out.println(key + " - " + value);
		}
		System.out.println();
		
		// remove(key) : 삭제 return value;
		System.out.println("손흥민 삭제 : " + hm.remove("손흥민"));
		System.out.println("박지성 삭제 : " + hm.remove("박지성"));
		System.out.println(hm);
		
		System.out.println();
		
		String dkey = "";
		if(hm.containsKey(dkey)) {
			hm.remove(dkey);
			System.out.println(dkey + "삭제"); }
		else 
			System.out.println("삭제 key가 없습니다...");
		System.out.println();
		
		
	}
}
package ch04_map;

public class Member {
	private String id;
	private String name;
	
	public Member(String id, String name ) { this.id = id; this.name = name;}
	
	public String getId() { return id; }
	public void setId(String name) { this.id =name;}
	
	public String getName() {return name;}
	public void setName(String name) {this.name=name;}
	
	public String toString() {
		return id + " - " + name;
	}
	
}
--------------------------------------------------------------------------------

//MemberManager

package ch04_map;

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

public class MemberManager {

	private Map<String, Member>map; // key : id   value : name
	
	public MemberManager(){
		map = new HashMap<>();
	}
	
	// 회원 추가
	public void insert(String id, String name) {
		if(map.containsKey(id)) {System.out.println("중복 ID 다시 진행하세요..");}
		else { map.put(id, new Member(id,name));}
	} // insert
	
	public boolean id_check(String id) {
		if(map.containsKey(id))
			return true;
		return false;
	}
	
	public void delete(String id) {
		if(id_check(id)) {
			map.remove(id);
			System.out.println(id + "삭제 완료");
		} else {
		System.out.println("없는 id 입니다..");
		}
	} // delete
	
	public void list() {
		Set<String> set = map.keySet();
		Iterator<String> it = set.iterator();
		while(it.hasNext()) {
			String key = it.next();
			Member value = map.get(key);
			System.out.println(value);
		}
	} //list
	
	public void end() {
		System.out.println("- Program end -");
		System.exit(0);
	}
}
--------------------------------------------------------------------------------

// MemberMain
package ch04_map;

import java.util.Scanner;

public class MemberMain {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		MemberManager mem = new MemberManager();
		
		while(true) {
			System.out.println("----- 회 원    관 리 -----");
			System.out.print("1.가입 2.삭제 3.목록 >>");
			int select = sc.nextInt();
			
			switch(select) {
			case 1: // 가입 : id(key) , name(value)
				System.out.print("id 입력 > ");
				String new_id = sc.next();
				if(mem.id_check(new_id))
					System.out.println("사용중인 ID입니다..");
				else {
					System.out.print("name 입력 > ");
					String new_name = sc.next();
					mem.insert(new_id, new_name);
				}
				break;
			case 2: //
				System.out.print("삭제할 ID를 입력하세요. > ");
				String delete_id = sc.next();
				mem.delete(delete_id);
				break;
			case 3:
				mem.list();
				break;
			case 0:
				mem.end();
			default:
				System.out.println("선택오류");
			}
		}
		
	}
}