본문 바로가기
Back-End/Java

Java(8)

by newny 2023. 3. 22.
반응형

Java Collection Framework

객체를 어떤 방식으로 묶을 것인가를 정하기 위한 인터페이스
 

List

  • 요소를 일렬로 유지해서 순서에 의해 접근한다
  • 구현 클래스 : ArrayList, Vector 등
  • Vector와 ArrayList는 동일한 내부구조를 가지고 있음
  • Vector와 ArrayList의 차이는 메소드의 동기화(synchronized) 유무임
  • Vector는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 Vector() 메소드를 실행할 수 없음
  • → 그렇기 때문에 멀티 스레드 환경에서는 안전하게 객체를 추가 또는 삭제할 수 있음
List list = new ArrayList();
list.add(5);
list.add(6.7);
list.add('M');
list.add("SEOUL");

System.out.println(list.size()); //요소의 갯수 4
for (int i = list.size() - 1; i >= 0; i--) {
    list.remove(i);
}
System.out.println(list.size()); //요소의 갯수 0

 

Set

  • 구현 클래스 : HashSet, TreeSet, EnumSet 등
  • 순서가 없이 저장됨 (Index 없음)
  • 객체를 중복해서 저장할 수 없고, 하나의 null만 허용함
  • iterator() 메소드를 이용하면 저장된 객체를 한번씩 가져올 수 있음
  • 순서가 없기때문에 값을 넣은 순서대로 출력되지 않음
// 객체 가져오기
// 방법1 : 향상된 for문 사용
Set<E> set = new HashSet<>();
for(E e : set) {
	...
}

// 방법2 : Set컬렉션의 iterator() 메소드 사용
Set<E> set = new HashSet<>();
Iterator<E> iterator = set.iterator();

 

Map

  • 구현 클래스 : HashMap, Hashtable, Properties 등
  • 순서가 없이 저장됨(Index 없음)
  • key와 value 한쌍으로 저장되어 key값으로 value를 찾을 수 있음
  • key값은 중복값이 올 수 없음
  • JSON, 파이썬(딕셔너리), NoSQL DB 등에서 많이 사용하는 문법
HashSet command = new HashSet();
command.add("list.do=net.bbs.List");
command.add("read.do=net.bbs.Read");
command.add("write.do=net.bbs.Write");

System.out.println(command.size());

// 1) 반복자 생성하기
Iterator iterator1 = command.iterator();

HashMap hm = new HashMap();

// 2) 값을 모두 출력
while (iterator1.hasNext()) {
    String obj = (String)iterator1.next();

    // 3) "="위치를 기준으로 문자열 분리하기
    // split(), substring(), StringTokenizer 클래스 선택 사용
    String[] str = obj.split("=");
    hm.put(str[0], str[1]);
}
System.out.println(hm.get("read.do"));

 

thread

  • 하나의 프로그램이나 하나의 메소드가 cpu 자원을 전부 점유하는 것을 막을 수 있음
  • JVM이 쓰레드 관리자에 등록하고, start() 메소드가 run() 을 호출함
  • Thread 클래스 : 인터페이스 Runnable의 구현 클래스
  • 예) 채팅, 실시간 예매등에 많이 사용

 
thread 사용 방법 1

  • Thread 클래스를 상속받아 사용
  • 자바에서 class는 단일상속만 가능하기 때문에 한 클래스에서 상속을 받아 사용하면 다른 클래스에서 사용 불가
class MyThread1 extends Thread {
	public MyThread1() {}

  // start() 메소드는 run() 메소드를 호출하는 기능
  @Override
  public void run() {
		...
  }
}
MyThread1 myThread1 = new MyThread1();

 
thread 사용 방법 2 ⭐

  • Runnable 인터페이스를 구현하여 사용
  • 자바에서 interface는 여러 클래스에서 사용 가능
class MyThread2 implements Runnable {
  public MyThread2() {}

  // start() 메소드는 run() 메소드를 호출하는 기능
  @Override
  public void run() {
		...
  }
}
Runnable myThread2 = new MyThread2();
Thread thread = new Tread(myThread2);
// 또는 -----------------------------
Thread thread = new Tread(new MyThread2());
반응형

'Back-End > Java' 카테고리의 다른 글

Java(9)  (0) 2023.03.23
Java(7)  (0) 2023.03.21
Java 예제(4)  (0) 2023.03.20

댓글