[java] 컬렉션 프레임워크, 스레드
Chapter11 컬렉션 프레임워크
1. 컬렉션 프레임워크
what?
데이터를 효율적으로 다루기 위한 클래스 모음
how?
Collection 인터페이스 구현: Set, List, Queue
독자적: Map
Collection 인터페이스 메서드
메서드 | 설명 |
boolean add(E e) | 파라미터로 지정된 요소를 컬렉션에 추가 |
boolean contains(Object obj) | 객체 obj 가 컬렉션에 존재하는지 여부 |
boolean isEmpty() | 컬렉션이 비어있는지 아닌지 여부 |
Iterator iterator() | 해당 컬렉션 요소의 iterator 객체 반환 |
boolean remove(Object obj) | 객체 obj 제거 |
int size() | 요소의 개수 반환 |
iterator() 메서드
what?
해당 컬렉션의 iterator를 반환하는 메서드
Iterator 객체의 메서드 | 설명 |
hasNext() | 다음 요소가 있는지 없는지 판단 |
next() | 다음 요소를 반환 |
2. Set
what?
데이터를 모아놓은 자료구조 인터페이스
why?
how?
- 데이터 중복 x
- 저장 순서 유지 x
구현 클래스
1)HashSet
what?
Set 인터페이스가 구현된 클래스
why?
how?
중복 x, 저장 순서 x
생성자
HashSet() | 기본 생성자 |
HashSet(Collection collection) | 컬렉션 요소로 HashSet 객체 생성 |
HashSet(int capacity) | capacity의 용량을 가진 객체 생성 |
2)TreeSet
what?
Set 인터페이스+정렬 기능
why?
how?
중복 데이터 x
작은 값은 왼쪽에, 큰 값은 오른쪽에 추가
범위 검색에 효과적
순서: 객체 생성→add()→Iterator
3. List★
what?
데이터를 일렬로 늘어놓은 구조
why?
how?
List 인터페이스의 주요 메서드 | 설명 |
void add(int index, E elem) | index 위치에 요소 elem 추가 |
E get(int index) | index 위치에 있는 요소 반환 |
int indexOf(Object o) | 요소 o가 있는 위치 반환 |
ListIterator listiterator() | ListIterator 객체 반환 |
E remove(int index) | index 위치에 있는 요소 삭제, 삭제한 요소 반환 |
E set(int index, E elem) | 지정한 index의 요소 elem으로 변경 |
1)ArrayList
what?
배열에서 발전된 형태. 요소를 추가하면 0번부터 차례로 저장됨
why?
원하는 위치에 요소를 추가, 삭제, 반환 가능
how?
2) LinkedList
what?
요소들이 앞뒤로 연결되어있는 리스트. 각 요소가 전과 뒤의 요소의 주소를 가지고 있음
4. Queue와 Stack
1)Queue
FIFO(First In First Out) 구조. 먼저 들어온 요소가 먼저 출력됨
메서드 | 설명 | |
예외 발생 | boolean add(E e) | Queue에 요소 e 추가 |
E element() | Queue의 최상단 요소 반환 | |
E remove() | Queue의 최상단 요소 반환 후 제거 | |
예외 발생 x | boolean offer(E e) | Queue에 요소 e 추가 |
E peek() | Queue의 최상단 요소 반환 | |
E poll() | Queue의 최상단 요소 반환 후 제거 |
2)Stack
LIFO(Last In First Out). 마지막에 추가되는 요소가 먼저 출력됨
메서드 | 설명 |
E element() | 요소 반환 |
E peek() | 요소 반환 |
E pop() | 요소 하나를 제거하면서 반환 |
E push(E item) | 새로운 요소 추가 |
int search(Object o) | 요소 o가 있는지 검색해서 위치 반환 |
5. Map
what?
키와 값을 쌍으로 저장, 키를 통해서 값 참조
why?
how?
구현 클래스: HashMap, TreeMap
메서드 | 설명 |
boolean containsKey(Object key) | 해당 키가 있는지 여부 반환 |
boolean containsValue(Object value) | 해당 값이 있는지 여부 반환 |
V get(Object key) | 해당 key와 쌍인 값 반환 |
boolean isEmpty() | 맵 객체에 요소가 없는지 판단 |
Set<key> keySet() | 키들을 Set 형태로 반환 |
V put(K key, V value) | 키와 값을 요소로 추가 |
V remove(Object key) | 이 키를 가진 요소를 제거 |
int size() | 전체 요소의 개수 반환 |
Chapter12 스레드
1. 스레드란?
하나의 프로세스 안에서 두 가지 이상의 일을 하도록 하는 것
2. 스레드 생성
1) Thread 클래스 상속
Thread 클래스 상속, public void run() 메서드 오버라이딩
실행: 인스턴스 생성, start() 메서드로 실행
class Th1 extends Thread
{
public void run()
{
//작업 내용
}
}
public class Class
{
public static void main(String[] args)
{
Th1 t1 = new Th1();
t1.start();
}
}
2) Runnable 인터페이스 구현
Runnable 인터페이스 구현, 추상 메서드 run() 오버라이딩
실행: 구현 클래스 인스턴스 생성, Thread 클래스의 인수로 주소 전달해서 스레드 생성, start() 메서드로 실행
class Th2 implements Runnable
{
public void run()
{
//작업 내용
}
}
public class Class
{
public static void main(String[] args)
{
Th2 t2 = new Th2();
Thread t = new Thread(t2);
t.start();
}
}
3. 스레드의 라이프사이클
- new: new로 인스턴스화된 상태. Runnable이 될 수 있음
- Runnable: start() 메서드가 호출됨, 실행할 수 있는 상태로 대기. 선택되면 run() 메서드 수행
- Blocked: 실행 중인 스레드가 sleep(), join() 메서드를 호출함. 선택받을 수 없음
- Dead: run() 메서드 실행을 모두 완료함. 할당받은 메모리와 정보 삭제
1)sleep()
what?
지정된 시간동안 block 상태로 만듦
why?
지정하지 않으면 시간 지체 없이 모두 실행되기 때문에 시간 간격을 두고 싶을 때 사용한다.
how?
1000분의 1초까지 지정 가능
2)join
특정 스레드가 작업을 먼저 수행할 때 사용
시간 지정시 특정 스레드가 작업을 먼저 수행. 시간 지정하지 않으면 작업 완료될 때까지 나머지가 대기
join()
join(long millis)
join(long millis, int nanos)
5. 스레드의 동기화
what?
멀티 스레드로 작업할 때 스레드간 작업이 간섭되지 않도록 하는 것
why?
여러 스레드가 한 메서드를 한꺼번에 사용하면서 야기되는 문제를 방지하기 위함
how?
공통되는 메서드 선언부에 'synchronized' 부여
synchronized 처리 된 메서드가 자신에게 접근한 스레드에게 lock 권한 부여. 작업을 완료하면 다시 가져옴. lock 권한을 가지지 못한 스레드는 메서드를 사용할 수 없다.