본문 바로가기
Java/Java 인강

Java 인강 필기 12

by code2772 2022. 10. 2.

[ 목차 ]

    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