API - Map, HashMap
import java.security.KeyStore.Entry;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Test01 {
public static void main(String[] args) {
// Map<Integer, int[]> map = new HashMap<>();
// 2차원밸류
Map<String, Integer> map = new HashMap<>();
System.out.println(map.put("a", 100));
System.out.println(map.get("a"));
System.out.println(map.put("a", 1000));
System.out.println(map.put("a", 50));
System.out.println(map.get("a"));
// key 값은 중복이 안 되고 value값은 중복이 된다
map.put("b", 10);
map.put("c", 10);
map.put("d", 20);
System.out.println(map.size());
System.out.println(map.containsKey("a"));
System.out.println(map.containsKey(30));
System.out.println(map.containsValue("a")); // a값의 value는 없으므로 false
System.out.println(map.containsValue(50)); // 50값의 value는 값이 입력되어 있기 때문에 true
// 데이터 추출
Set<String> set = map.keySet();
// key값을 set값으로 받아들이는 것
Iterator<String> it = set.iterator();
// while(it.hasNext()) {
// String key = it.next();
// int value = map.get(key);
// System.out.println(key + " : " + value);
// }
map.remove(it); // value값 반환
map.remove(set, it); // vaule값과 key값을 모두 반환
}
}
Exercise 1
[도서 등록 프로그램 구현]
사용자에게 계속해서 도서명을 입력받아 저장하는 저장소를 구현
이미 등록된 책이면 등록을 거절해야 함
(예상 결과)
도서명 : 어린 왕자
도서가 등록되었습니다. - 현재 도서 1개
도서명 : 키다리 아저씨
도서가 등록되었습니다. - 현재 도서 2개
도서명 : 어린 왕자
이미 등록된 도서입니다.
도서명 : 종료
프로그램을 종료합니다.
// ArrayList를 이용해 풀기
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
List<String> list = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print("등록할 도서를 입력하세요.\n도서 등록이 완료된 경우[종료]를 입력하세요.\n도서명 : ");
String book = sc.nextLine();
if (book == null) {
System.out.println("데이터가 없습니다. 도서를 입력하세요.");
} else if (book.equals("종료")) {
System.out.println("프로그램이 종료되었습니다.");
break;
} else if (list.contains(book)) {
System.out.println("이미 등록된 도서입니다.");
} else {
list.add(book);
System.out.println("도서가 등록되었습니다. - 현재 도서 " + list.size() + "개");
System.out.println(list);
}
System.out.println();
}
sc.close();
}
}
출력화면
// HashMap을 이용해 풀기
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
public class Main2 {
public static void main (String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
Scanner sc = new Scanner(System.in);
while (true) {
if (map.isEmpty()) {
System.out.println("데이터가 없습니다.");
} else {
for (Entry<String, Integer> en : map.entrySet()) {
// Set<Map.Entry<K,V>> entrySet() ; Returns a Set view of the mappings contained in this map.
System.out.println(en.getKey() + " : " + en.getValue() + "원");
}
}
System.out.println();
System.out.print("도서명 : ");
String name = sc.next();
sc.nextLine();
if (name.equals("종료")) {
System.out.println("프로그램을 종료합니다.");
break;
} else if (map.containsKey(name)) {
System.out.println("이미 등록된 도서입니다.");
} else {
System.out.print("가격 입력 : ");
int price = sc.nextInt();
map.put(name, price);
System.out.println("도서가 등록되었습니다.\n현재 도서 : " + map.size() + "권");
}
}
sc.close();
}
}
Exercise 2
[전화번호부 만들기]
<한 사람의 정보>
이름
전화번호 (무한대로 저장 가능해야 한다)
- 모바일, 직장, 집
- 전화번호
그룹 : 가족, 친구, 직장, 조, ... 입력 추가 수정 삭제 검색
- 그룹별 검색(그룹명 검색)
- 이름 포함검색
- 전화번호 포함검색
// class Main
public class Main {
public static void main(String[] args) {
new Controller();
}
}
// class Controller
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import javax.swing.GroupLayout.Group;
public class Controller {
private Map<String, List<Person>> map = new HashMap<>();
private List<String> groups = new ArrayList<>();
private Scanner sc = new Scanner(System.in);
public Controller() {
List<Person> list = new ArrayList<>();
Person p1 = new Person("김민준");
p1.addPhoneNumber(new PhoneNumber("핸드폰", "010-3666-6768"));
p1.addPhoneNumber(new PhoneNumber("집", "052-1234-1234"));
list.add(p1);
map.put("학원", list);
list = new ArrayList<>();
Person p2 = new Person("콩벌레");
p2.addPhoneNumber(new PhoneNumber("핸드폰", "010-3666-6777"));
p2.addPhoneNumber(new PhoneNumber("집", "02-364-4598"));
list.add(p2);
map.put("사육", list);
groups.add("학원");
groups.add("사육");
menu();
}
private int inputInt(String msg) {
System.out.print(msg + "\n입력 : ");
int select = sc.nextInt();
return select;
}
private String inputString(String msg) {
System.out.print(msg + " 입력 : ");
return sc.next();
}
private void exit() {
System.out.println("프로그램이 종료됩니다.");
sc.close();
System.exit(0);
}
private void menu() {
while(true) {
int select = inputInt("1.입력 2.검색 3.수정 4.삭제 5.종료");
switch(select) {
case 1:
insert();
break;
case 2:
select();
break;
case 3:
update();
break;
case 4:
delete();
break;
case 5:
exit();
default:
System.out.println("잘못된 메뉴!");
}
}
}
private int dispGroup(boolean mode) {
if(groups.isEmpty()) {
System.out.println("저장된 정보가 없습니다.");
return 0;
}
String li = "";
for(int i = 0; i < groups.size(); i++) {
li += i + 1 + "." + groups.get(i) + "\n";
}
int size = groups.size();
if(!mode) {
li += groups.size() + 1 + "." + "그룹 추가";
size++;
}
int select = 0;
do {
select = inputInt(li);
}while(select < 1 || select > size);
return select;
}
private void insert() {
String name = inputString("이름");
int gs = dispGroup(false);
List<Person> list = null;
String group = null;
if(gs == 0 || gs == groups.size() + 1) {
group = inputString("그룹");
if(groups.indexOf(group) != -1) {
System.out.println("그룹이 존재 합니다.처음으로...");
return;
}
list = new ArrayList<>();
}else {
group = groups.get(gs - 1);
list = map.get(group);
}
List<PhoneNumber> pnList = new ArrayList<>();
while(true) {
String kind = inputString("종류");
String number = inputString("전화번호");
pnList.add(new PhoneNumber(kind, number));
int an = inputInt("계속 하시겠습니까?(1.계속 2.종료)");
if(an == 2) {
break;
}else if(an < 1 || an > 2) {
System.out.println("잘못된 입력! 처음으로...");
return;
}
}
list.add(new Person(name, pnList));
map.put(group, list);
if(groups.indexOf(group) == -1) {
groups.add(group);
}
System.out.println("정보 입력 성공!");
}
private void select() {
while(true) {
int select = inputInt("1. 전체검색 2.그룹검색 3.이름검색 4.전화번호검색 5.이전");
switch(select) {
case 1:
allDisp();
break;
case 2:
selectGroup();
break;
case 3:
selectName();
break;
case 4:
selectNumber();
break;
case 5:
return;
default:
System.out.println("잘못된 입력 : ");
}
}
}
private void allDisp() {
for(String group : groups) {
List<Person> list = map.get(group);
System.out.println("====" + group + "====");
for(Person ps : list) {
System.out.println(ps);
}
}
}
private void selectGroup() {
int select = dispGroup(true);
System.out.println("====" + groups.get(select-1) + "====");
for(Person ps : map.get(groups.get(select-1))) {
System.out.println(ps);
}
}
private void selectMode(String str,int mode) {
for(String group : groups) {
List<Person> list = map.get(group);
System.out.println("====" + group + "====");
boolean check = true;
for(Person ps : list) {
if(mode == 1) {
if(ps.includeName(str)) {
System.out.println(ps);
check = false;
}
}else if(mode == 2) {
if(ps.findNumberDisp(str)) {
System.out.println(ps);
check = false;
}
}
}
if(check) {
System.out.println("그룹에 이름이 없습니다.");
}
}
}
private void selectName() {
String name = inputString("검색할 이름");
for(String group : groups) {
List<Person> list = map.get(group);
System.out.println("====" + group + "====");
boolean check = true;
for(Person ps : list) {
if(ps.includeName(name)) {
System.out.println(ps);
check = false;
}
}
if(check) {
System.out.println("그룹에 이름이 없습니다.");
}
}
}
private void selectNumber() {
String number = inputString("검색할 전화번호");
for(String group : groups) {
List<Person> list = map.get(group);
System.out.println("====" + group + "====");
boolean check = true;
for(Person ps : list) {
if(ps.findNumberDisp(number)) {
System.out.println(ps);
check = false;
}
}
if(check) {
System.out.println("그룹에 이름이 없습니다.");
}
}
}
public Person searchName(String name,int group) {
Person ps = null;
List<Person> list = map.get(groups.get(group - 1));
for(Person p : list) {
if(p.findName(name)) {
ps = p;
break;
}
}
return ps;
}
public void update() {
String name = inputString("수정할 이름");
int group = dispGroup(true);
Person ps = searchName(name, group);
if(ps == null) {
System.out.println("검색한 사람이 존재하지 않습니다!");
return;
}
System.out.println(ps);
while(true) {
int select = inputInt("1.이름수정 2.전화번호수정 3.이전");
switch(select) {
case 1:
updateName(ps);
break;
case 2:
updatePhoneNumber(ps);
break;
case 3:
return;
default:
System.out.println("잘못된 메뉴 입력!");
}
}
}
private void updateName(Person ps) {
String name = inputString("수정할 이름");
ps.setName(name);
System.out.println("이름을 수정하였습니다.");
}
private void updatePhoneNumber(Person ps) {
ps.listDisp();
int select = inputInt("1.추가 2.수정 3.삭제 4.이전");
switch(select) {
case 1:
addNumber(ps);
break;
case 2:
updateNumber(ps);
break;
case 3:
deleteNumber(ps);
break;
case 4:
return;
default:
System.out.println("잘못된 메뉴 입력!");
}
}
private void addNumber(Person ps) {
String kind = inputString("종류");
String number = inputString("전화번호");
ps.addPhoneNumber(new PhoneNumber(kind, number));
System.out.println("전화번호가 추가되었습니다.");
}
public void updateNumber(Person ps) {
int select = pnSelect(ps, "수정");
if(select == -1) {
return;
}
String kind = inputString("수정할 종류");
String number = inputString("수정할 전화번호");
ps.updatePhoneNumber(new PhoneNumber(kind, number), select - 1);
System.out.println("수정되었습니다.");
}
public int pnSelect(Person ps,String str) {
ps.listDisp();
int select = inputInt(str + "할 번호");
if(select < 1 || select > ps.getPnListSize()) {
System.out.println("잘못된 번호 입력!");
return -1;
}
return select;
}
public void deleteNumber(Person ps) {
int select = pnSelect(ps, "삭제");
if(select == -1) {
return;
}
ps.deletePhoneNumber(select - 1);
System.out.println("삭제되었습니다.");
}
private void delete() {
String name = inputString("삭제할 이름");
int group = dispGroup(true);
Person ps = null;
List<Person> list = map.get(groups.get(group - 1));
for(int i = 0; i < list.size(); i++) {
if(list.get(i).findName(name)) {
list.remove(i);
break;
}
}
}
}
// class Person
import java.util.ArrayList;
import java.util.List;
public class Person {
private String name;
private List<PhoneNumber> pnList = new ArrayList<>();
public Person(String name,List<PhoneNumber> pnList) {
this.name = name;
this.pnList = pnList;
}
public Person() {
}
public Person(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public void setPnList(List<PhoneNumber> pnList) {
this.pnList = pnList;
}
public String getName() {
return name;
}
public List<PhoneNumber> getPnList(){
return pnList;
}
public void addPhoneNumber(PhoneNumber pn) {
pnList.add(pn);
}
public void updatePhoneNumber(PhoneNumber pn,int i) {
pnList.set(i, pn);
}
public void deletePhoneNumber(int i) {
pnList.remove(i);
}
public int getPnListSize() {
return pnList.size();
}
public void listDisp() {
System.out.println("종류\t전화번호");
for(int i = 0; i < pnList.size(); i++) {
System.out.println("[" + (i + 1) + "] " + pnList.get(i));
}
}
@Override
public String toString() {
String info = "이름 : " + name + "\n";
info+="종류\t전화번호\n";
for(int i = 0; i < pnList.size(); i++) {
info+=pnList.get(i) + "\n";
}
return info;
}
public boolean findName(String name) {
if(this.name.equals(name)) {
return true;
}
return false;
}
public boolean includeName(String name) {
return this.name.contains(name);
}
public List<PhoneNumber> findKindList(String kind){
List<PhoneNumber> list = new ArrayList<>();
for(PhoneNumber pn : pnList) {
if(pn.findNumber(kind)) {
list.add(pn);
}
}
return list;
}
public void listDisp(List<PhoneNumber> list) {
if(list.isEmpty()) {
System.out.println("저장된 데이터가 없습니다.");
}else {
System.out.println("종류\t전화번호");
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
public boolean findNumberDisp(String number) {
for(PhoneNumber pn : pnList) {
if(pn.includeNumber(number)) {
return true;
}
}
return false;
}
}
// class PhoneNumber
public class PhoneNumber {
private String kind;
private String number;
public PhoneNumber(String kind,String number) {
this.kind = kind;
this.number = number;
}
public void setKind(String kind) {
this.kind = kind;
}
public void setNumber(String number) {
this.number = number;
}
public String getKind() {
return kind;
}
public String getNumber() {
return number;
}
public boolean findNumber(String kind) {
if(kind.equals(this.kind)) {
return true;
}
return false;
}
public boolean includeNumber(String number) {
if(this.number.indexOf(number) == -1) {
return false;
}else {
return true;
}
}
@Override
public String toString() {
return kind + " : " + number;
}
}
'Backend > JAVA' 카테고리의 다른 글
JAVA 소켓프로그래밍 Network TCP (0) | 2023.03.13 |
---|---|
JAVA 소켓프로그래밍 Network UDP (1) | 2023.03.03 |
JAVA 코딩 API (Application Programming Interface) - String, Object (0) | 2023.03.03 |
JAVA 코딩 API (Application Programming Interface) - charstream, singlebyte (1) | 2023.03.03 |
JAVA 코딩 API (Application Programming Interface) - Math, System, Date, Scanner (1) | 2023.03.03 |