728x90
반응형
(22.8.6)
# 40강 고객관리 프로그램
// HashMap을 활용하여, 사용자의 이름과 전화번호를 저장하는 전화번호를 만들어보자.
<메서드 정리>
1. 생성 : HashMap 변수명 = new HashMap();
2. 삽입 : 변수명.put(key, value)
3. 가져오기 : 변수명.get(key)
4. key 존재확인 : 변수명.containsKey(key)
package day40;
import java.util.*;
public class Day40_1 {
static Scanner sc= new Scanner (System.in);
static HashMap hm = new HashMap();
public static void main(String[] args) {
hm.put("가길동","010-1234-1234");
hm.put("또치","010-1111-2222");
hm.put("최민수","010-2345-2345");
hm.put("유재석","010-1313-1313");
hm.put("박명수","010-4444-5555");
hm.put("노홍철","010-1010-2020");
hm.put("하하","010-3030-4044");
int choice;
while(true) {
System.out.println("***********전화번호부 프로그램***********");
System.out.println("1. 고객 저장");
System.out.println("2. 고객 검색");
System.out.println("3. 전체 보기");
System.out.println("4. 끝내기");
System.out.print("번호 입력:");
choice= sc.nextInt();
if(choice==1) {insert();}
else if(choice==2) {search();}
else if(choice==3) {show();}
else if(choice==4) {
System.out.println("종료합니다.");
break;
}
}
}
public static void insert() {
System.out.print("저장할 고객의 이름:");
String insertName= sc.next();
if(hm.containsKey(insertName)) {
System.out.println("이미 존재하는 사람이므로 저장할 수 없습니다.");
return;
}
else {
System.out.print("저장할 고객 번호:");
String insertPhone= sc.next();
hm.put(insertName,insertPhone);
System.out.println("저장이 완료되습니다.");
}
}
public static void search() {
System.out.print("검색할 이름:");
String searchName = sc.next();
if(hm.containsKey(searchName)){
System.out.println("검색 완료!");
System.out.println("검색된 전화번호:"+hm.get(searchName));
}
else {
System.out.println("존재하지 않는 이름입니다.");
}
}
public static void show() {
Set keySet = hm.keySet();
Iterator i = keySet.iterator();
System.out.println("-----전체 고객 조회-------");
while(i.hasNext()) {
String curName=(String)i.next();
System.out.println("name:"+curName+",phone:"+hm.get(curName));
}
}
}
# 41강 정렬
///////알고리즘 부분 내용 참고///////
- 선택정렬 - 최소값 혹은 최대값을 선택해서 가장 앞에다가 위치하여 선택할 위치를 이동하며 정렬하는 방법, 구현이 쉽다는 장점, 다른 정렬에 비해 오래걸린다는 단점
기본로직)
1) 정렬되지 않은 인덱스의 맨 앞에서부터 이름 포함한 드 이후의 값 중 가장 작은 값을 찾아 간다.
2) 가장 작은 값을 찾으면 그 값을 현재 인덱스의 값과 바궈준다.
3) 다음 인덱스로 이동하여 위 과정을 반복한다.
// 시간복잡도 - O(n^2)
package day41;
public class Day41_1 {
public static void main(String[] args) {
int ar[]= {8,1,2,5,4,3,6,7};
int min,tmp;
for(int i=0;i<ar.length-1;i++) {
min=i;
for(int j=i+1;j<ar.length;j++) {
if(ar[min]>ar[j]) {
tmp=ar[min];
ar[min]=ar[j];
ar[j]=tmp;
}
}
}
for(int i=0;i<ar.length;i++) {
System.out.print(ar[i]+" ");
}
System.out.println();
}
}
- 삽입정렬 - 지정한 값의 삽입할 위치를 찾아 정렬하는 방법
기본로직)
1) 삽입정렬은 두 번째 idx부터 시작 i=1
2) 현재idx는 별도의 변수에 저장 idx=i
3) 비교 idx=현재idx -1 j=i-1
4) idx값 < 비교idx의 값 : idx<-> j
package day41;
public class InsertionSort {
public static void main(String[] args) {
int ar[]= {8,1,2,5,4,3,6,7};
int tmp;
int idx;
for(int i=1;i<ar.length;i++) {
idx=i;
for(int j=i-1;j>=0;j--) {
if(ar[idx]<ar[j]) {
tmp=ar[idx];
ar[idx]=ar[j];
ar[j]=tmp;
idx=j; }
else {
break; }
}
}
for(int i=0;i<ar.length;i++) {
System.out.print(ar[i]+" ");
}
}
}
- 버블정렬 - 인접한 두 수를 비교해서 큰 수를 뒤로 보내는 알고리즘정렬과정이 거품이 일어나는 것과 비슷하다 하여 버블, 구현이 쉽고 코드가 직관적이다. 반면 시간이 오래걸리고 최선, 최악, 평균 모두 o(n^2)이라는 시간 복잡도를 가진다.
package day41;
public class BubbleSort {
public static void main(String[] args) {
int ar[]= {6,4,7,9,1};
int tmp;
for(int i=ar.length-1;i>=0;i--) {
for(int j=0;j<i;j++) {
if(ar[j]>ar[j+1]) {
tmp=ar[j];
ar[j]=ar[j+1];
ar[j+1]=tmp;
}
}
}
for(int i=0;i<ar.length;i++) {
System.out.print(ar[i]+" ");
}
System.out.println();
}
}
# 42강 스레드
- 스레드 - 하나의 프로세스 안에서 두 가지 이상의 일을 하도록 하는 것
// 프로세스 - 실행중인 프로그램
- 스레드 - 프로세스에서 작업을 하는 프로세스
- 멀티 스레드 프로세스 - 두 가지 이상의 작업을 하는 프로세스
- 시간 분할 방식 - 모든 프로세스에게 동일한 시간을 할당하고 골고루 실행되는 방식
- 선점형 방식 - 각각의 프로세스에게 우선 순위를 부여하고 우선순위가 높은 순으로 실행되는 방식
package day42;
public class Thread1 {
public static void main(String[] args) {
MyThread t1= new MyThread();
MyThread2 t2= new MyThread2();
t1.start();
Thread t= new Thread(t2);
t.start();
for(int i=0;i<10;i++) {
System.out.println("main 진행 중 "+i);
}
}
}
class MyThread extends Thread{
public void run() {
for(int i=0;i<10;i++) {
System.out.println("Thread 진행 중 "+i);
}
}
}
class MyThread2 implements Runnable{
@Override
public void run() {
for(int i=0;i<10;i++) {
System.out.println("Runnable 진행 중 "+i);
}
}
}
package day42;
public class MainThread {
public static void main(String[] args) {
Thread3 t3= new Thread3();
t3.start();
System.out.println("Thread Name:"+Thread.currentThread().getName());
System.out.println("Thread state:"+Thread.currentThread().getState());
System.out.println("Thread priority:"+Thread.currentThread().getPriority());
}
}
class Thread3 extends Thread{
public void run() {
this.setName("Thread3");
System.out.println("Thread Name:"+Thread.currentThread().getName());
System.out.println("Thread state:"+Thread.currentThread().getState());
System.out.println("Thread priority:"+Thread.currentThread().getPriority());
}
}
반응형
'Java > Java 인강' 카테고리의 다른 글
Java 인강 필기 14 (0) | 2022.10.02 |
---|---|
Java 인강 필기 13 (1) | 2022.10.02 |
Java 인강 필기 11 (0) | 2022.10.02 |
Java 인강 필기 10 (1) | 2022.10.02 |
Java 인강 필기9 (0) | 2022.10.02 |