본문 바로가기
JAVA

JAVA 6주차

by Zㅣ존수빈zz 2022. 12. 11.

- 컬렉션: List, Set, Map

 

1. Set

- HashSet과 TreeSet

- 공통적으로 중복이 불가하며 HashSet은 순서도 없다.

 

- Set 사용

Set<String> hs = new HashSet<>();

Set<String> ts = new TreeSet<>();

 

hs2.add("one");     // add: 추가
hs2.add("one");
hs2.add("one");
hs2.add("one");      // 여러번 추가해도 결과적으로는 "one" 하나만 추가된다.
hs2.add("two");
hs2.add("three");
hs2.add("four");
hs2.remove("two");      // remove: 삭제

 

- HashSet은 순서가 없기 때문에 순서를 지정해줄 수 있는 반복자 Iterator을 활용

  Iterator<String> it = hs2.iterator();

 

- 전체보기

  While(it.hasNext()) {       // hasNext(): 다음 값이 존재하는가? True | false

       System.out.println(it.next());     // Next(): 다음 값을 리턴한다

  }


2. List

- 삽입과 제거 등 수정이 간단하여 배열을 대체한다.

- ArrayList 사용

ArrayList<Integer> arr = new ArrayList<>();

 

- 값 대입

arr.add(1);      // 방을 만들면서 값을 대입 (0번방에 1 대입)

arr.add(2);      // (1번방에 2 대입)

arr.add(3);

 

- 값 수정

arr.set(1, 22);     // 1번방의 값을 22로 수정

 

- 값들 사이에 새로운 값 삽입

arr.add(2, 123);     // 기존 2번방에 있던 값을 뒤로 밀어내고 2번방에 새로운 값을 삽입

 

- 값 삭제

arr.remove(1);     // 1번방에 있는 값을 삭제하고 뒤의 값들을 앞으로 당김

 

- 값 리턴

arr.get(1);    // 1번방에 있는 값을 받는다.

 

- 전체보기

for(int i=0; i<arr1.size(); i++) {
     System.out.println(arr.get(i));
}


3. Map

- 순서를 단어로 지정 (key)

 

- Map 사용하기

HashMap<String, Integer> hm = new HashMap<>();

          <key의 변수형, 값의 변수형>

 

- 값 대입

hm.put("아메리카노", 1500);        // "아메리카노"방에 있는 값 1500

 

- 제거

hm.remove("아메리카노");

 

- 값 리턴

hm.get("아메리카노");

 

- 전체보기

  • Map은 순서가 아닌 key에 값을 저장하므로 우선 keySet()메서드를 사용하여 key만 Set형태로 만든다.
    Set<String> keyset = hm.keySet();
  • Set형태로 만들어진 keyset에 순서를 부여하기 위해 Iterator를 사용한다.
    Iterator<String> it = keyset.iterator();
  • 그 후 Set을 전체보기 할때와 마찬가지로 While문을 통해 출력한다.
    While(it.hasNext()) {
         String key = it.next();
         System.out.println(key + ":" + hm.get(key));
    }
  • 결과 : 아메리카노:1500

4. Thread

- 프로그램: 운영체제에 설치된 처리방법과 순서가 기술된 명령문의 집합체 (ex 실행파일)

- 프로세스: 실행중인 프로그램 (프로그램이 프로세스에 등록됨)

 

- Thread: 프로세스 내에서 실제로 작업을 수행하는 주체

  보통 한 프로세스 내에서 한 가지의 일을 수행하지만, 쓰레드를 이용하면 두가지 이상의 일을 동시에 작동시킬 수 있다.

 

- main(): 주 thread. 어떤 클래스를 만들고 메서드를 만들어도 실행되는 메서드는 main뿐이다.

               thread가 main에만 있기 때문

- 따라서 Thread를 추가하고 싶다면 Thead를 상속받아야 한다. 그리고 Thread의 코드는 오버라이딩 된 run()에 구현한다.

 

- 추가한 쓰레드는 start()로 시작 (run에 적을 코드는 start()로 실행)

public class Thread1 {
     public static void
main(String[] args) {
           MyThread mt = new MyThread();
           mt.start();

class
 
MyThread extends Thread {
     @Override
     public void run() {
          for(int i=0; i<10; i++) {
               System.out.println(i);
               try {                          // sleep애 오류가 날 수 있으므로 try / catch를 둘러준다
                    sleep(1000);        // sleep는 ms단위로 쓰레드를 중지시켰다가 실행한다.
               } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
               }
          }
     }
}

- 쓰레드의 우선순위를 정하는 방법 2가지

  • join(): 지금 실행중인 쓰레드 외에 전부 대기시킴
mt5.start();
try {mt5.join();}           // join(): 나 말고 대기
catch (Exception e) {}

mt5ex.start();              // 얘 대기
mt5ex2.start();            // 얘 대기
  • setPriority(): 우선순위를 정하여 실행한다.
    - 같은 객체를 공유하는 쓰레드들은 setPriorty를 통해 우선순위를 정해준다.
    - 1~10의 숫자를 적어 우선순위를 표시할 수 있으며 숫자가 높을수록 우선적으로 수행하게 되며 숫자를 대신하여 MAX_PRIORITy, MIN_PRIORITY, NORM_PRIORITY를 사용하기도 한다. 각각 10, 5, 1의 숫자와 같은 의미이다
public class Thread6 {
     public static void main(String[] args) {
          MyThread mt = new MyThread("first");
          MyThread mt2 = new MyThread("second");

          mt.setPriority(Thread.MAX_PRIORITY);      // 최고 우선순위 쓰레드     
          mt2.setPriority(Thread.MIN_PRIORITY);     // 최저 우선순위 쓰레드
         
          mt.start();
          mt2.start();

5. Runnable

- Thread를 생성하는 또다른 방법

- Java는 다중상속이 불가능하다. 따라서 해당 클래스가 다른 클래스를 상속받고 있으면 Thread 상속이 불가능해진다.

- 이때는 Interface형태의 Runnable을 상속받아 Thread를 대신한다.

class ex1{} 

class MyRunnable1 extends ex1 implements Runnable {
     @Override
     public void run() {
          for(int i=0; i<10; i++) {
               System.out.print(i+" ");
               try {Thread.sleep(100);} catch (Exception e) {}
          }    // Runnable은 인터페이스기 때문에 sleep메서드가 없음
     }
}

'JAVA' 카테고리의 다른 글

JAVA 8주차  (1) 2022.12.23
JAVA 7주차  (1) 2022.12.15
자바 5주차  (0) 2022.12.09
JAVA 4주차  (0) 2022.11.23
JAVA 3주차  (0) 2022.11.16

댓글