Java/Java 인강

Java 인강 필기 12

code2772 2022. 10. 2. 11:05
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