Collection
자료구조(Data Structure)를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 관련 패키지에 포함
자료(데이터) 수집에 관련된 API // 컬렉션 프레임웤(Collection FramWork)
- 주요 인터페이스 -
List계열
Map계열
Set계열
List계열
literable - Collection - List(타입) - ArrayList / Vector / LinkedList / Stack
자료가 순차적이고, 중복적인 자료인 경우 사용(가장 대표적 : ArrayList)
=> 객체를 인덱스로 관리(저장하면 자동으로 인덱스 부여)
- List 인터페이스를 구현한 클래스 -
AbstractList, AbstractSequentialList,
ArrayList, AttributeList, CopyOnWriteArrayList,
LinkedList, RoleList, RoleUnresolvedList, Stack, Vector
이 중에서 ArrayList, LinkedList가 많이 사용 된다.
LinkedList : ArrayLisy와 거의 비슷하지만 내부적으로 처리 과정이 다르다.
(인덱스 번호가 이동.)
Array : 크기가 정해짐. 정적
ArrayList : 크기가 변동, 동적, 나중에 많이 사용(비동기:속도효율 높음) // 값 변경시 데이터의 위치가 변경 되는것(데이터가 이동)
Vector : 초기사용,동기적 (속도효율 낮음), 일반 배열의 단점인 크기를 보강하고자 만들어진 클래스
=> ArrayList가 생긴 이후로는 잘 사용안한다고 한다.
vector의 주요 메소드 = 값을 추가하는 addElement
List계열의 add메소드와 똑같다. 단지 vector 자신이 사용하는 메소드인지 아니면 List타입에서 받아온 메소드 인지의 차이
반환타입 / 메소드 | 설명 |
boolean add(E e) | 데이터 추가 |
void add(int index, E element) | 해당 인덱스에 데이터 추가 |
E set(int index, E element) | 해당 인덱스에 데이터 대체 |
E get(int index) | 해당 인덱스에 데이터 리턴 |
boolean isEmpty( ) | 데이터 유무 확인 |
int size( ) | 저장된 데이터 수 확인 |
void claer( ) | 저장된 데이터 모두 삭제 |
E remove(int index) | 해당 인덱스의 데이터 삭제 |
boolean remove(Object o) | 해당 데이터 삭제 |
Iterator<E> iterator( ) | 저장된 객체를 한 번씩 가져오는 반복자 리턴 |
해당 인덱스에 데이터 추가
ArrayList와 LinkedList의 차이점은 내부 실행 과정에서 차이난다.
ArrayList의 경우 add메소드로 값을 추가 했을때 인덱스 번호는 그 자리를 유지하고 값이 인덱스 번호에 채워지는 식
LinkedList의 경우 값이 움직이는 것이 아니라 인덱스번호가 밀리던 당겨지던 인덱스 번호가 움직인다.
같은 조건에서 코드를 실행시켰을때 LinkedList가 더 빠르다.
Queue와 Stack
Queue : First In First Out (FIFO) 선입선출
=> list계열을 구현 받기 때문에 list메소드 사용 가능
Queue는 데이터를 순차적으로 처리하기 위한 인터페이스다.
=>주요 메소드 : 값 저장 offer();
값 꺼내는 peek(); =>가장 앞에 있는 값을 꺼낸다. (데이터가 삭제되지않음)
poll(); => 가장 앞에 있는 값을 꺼내고 지운다.
- Queue 인터페이스를 구현한 클래스 -
AbstractQueue, Array BlockingQueue,ArrayDeque, ConcurrentLinkedQueue,
DelayQueue, LinkedBlockingDeque,LinkedBlockingQueue, LinkedList,
PriorityBlockingQueue, PriorityQueue, SynchronousQueue 등
보통 LinkedList가 많이 사용된다.
Stack : Last In, First Out(LIFO) or First In Last Out(FILO) ( 후입선출 or 선입후출 ) // 자료구조
=> 주요 메소드 : 값을 추가하는 push("데이터");
값을 꺼내는 pop(); => pop메소드는 해당 값을 반환하고 그 값을 삭제 시킨다.
Map계열
: Map - NavigableMap - Hashtable/HashMap / Properties / TreeMap
: 자료가 Key, Value로 저장하는 구조 ( 키는 중복불가, 값은 중복 저장 가능)
=> 동일한 키에 값을 저장할 경우 기존에 값은 삭제되고 새로운 값이 저장된다.
- Map 인터페이스를 구현한 클래스 -
AbstractMap, Attributes, AuthProvider, ConcurrentHashMap,
ConcurrentSkipListMap, EnumMap, HashMap,Hashtable, IdentityHashMap,
LinkedHashMap, PrinterStateReasons,Properties, Provider, RenderingHints,
SimpleBindings, TabularDataSupport,TreeMap, UIDefaults, WeakHashMap
이 중에서 HashMap, 을 많이 사용한다.
HashMap ( 대표적인 Map컬렉션)
2가지 예약 타입 < 키에관련, 값에관련 >
예시) Map <String,Integer> m = new HashMap <String,Integer> ();
키 값은 기본타입을 사용 할 수 없다. 클래스 및 인터페이스 타입만 가능
HashTable(요즘엔 잘 사용안함)
=> HashMap과 동일한 내부구조
둘의 차이점
*HashTable : old ver (동기화) => 멀티 스레드 불가(스레드가 안전)
*HashMap : new ver.(비동기화) => 멀티 스레드 가능
Properties(웹에서 많이 사용:DB연동//파일을 읽을때)
=> HashTable의 하위 클래스( HashTable의 모든 특징 사용 가능)
단, 키와 값을 String 으로 제한
이렇게 사용하게 되면 나중에 유지보수하기 쉽고 값을 변경을 해도 코드를 따로 바꿔주지 않아도 된다.
TreeMap(군집분석)
기능 | 반환타입 / 메소드 | 설명 |
객체 추가 | V put(K key, V value) | 주어진 키로 값을 저장. |
객체 검색 |
boolean containsKey(Object key) | 주어진 키가 있는지 확인 |
boolean containsValue(Object value) | 주어진 값이 있는지 확인 | |
Set<Map.Entry<K,V>> enrtySet( ) | 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴 | |
V get(Object key) | 주어진 키가 있는 값을 리턴 | |
boolean isEmpty() | 컬렉션이 비어있는지 확인 | |
int size( ) | 저장된 키의 총 수를 리턴 | |
Collection<V> values() | 저장된 모든값을 Collection에 담아 리턴 |
|
객체 삭제 | void clear() | 모든 키와 값 삭제 |
V remove(Object key) | 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴 |
Set계열
값을 저장 시키지만 저장 될 때 그 순서가 유지되지 않는다. 객체명 중복 저장 불가능 <== 값(데이터)만 저장!!
값만 저장 되기 때문에 인덱스를 통하여 값을 가져올 수 없다
=> 반복자(iterator( ) )를 통하여 값을 꺼냄 (Iterator 인터페이스를 구현한 객체)
- Set 인터페이스를 구현한 클래스 -
AbstractSet, ConcurrentSkipListSet,CopyOnWriteArraySet,
EnumSet, HashSet, JobStateReasons, LinkedHashSet,TreeSet
HashSet이 많이 사용된다.
HashSet
객체를 순서없이 저장하고 중복 불가(해시 코드)!
기능 | 반환타입 / 메소드 | 설명 | ||||
객체 추가 | boolean add(E e) | 주어진 객체를 저장, 저장되면 true, 중복저장시 false | ||||
검색 객체 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 여부 확인 | ||||
isEmpty( ) | 컬렉션이 비어있는지 확인 | |||||
Iterator<E> iterator( ) | 저장된 객체를 한 번씩 가져오는 반복자 리턴 | |||||
int size( ) | 저장되어 있는 전체 객체 수 리턴 | |||||
객체 삭제 | void clear( ) | 저장된 모든 객체 삭제 | ||||
boolean remove(Object o) | 주어진 객체 삭제 |
- 값 꺼내기 -
Iterator 객체 생성
Iterator<String> itr = h.iterator();
while(itr.hasNext()) {
System.out.println(itr.next());
} // 값을 꺼낼때 처음 출력값이랑 다를 수 있다. (순서가 저장 되지 않기때문)
Iterator 인터페이스에 선언된 메소드
리턴타입 / 메소드명 | 설명 |
boolean hasNext( ) | 가져올 객체가 있으면 true를 리턴 없으면 false |
E next( ) | 컬렉션에서 하나의 객체를 가져온다. |
void remove( ) | Set 컬렉션에서 객체를 제거한다. |
'Learn > KH정보교육원' 카테고리의 다른 글
[KH정보교육원 당산] 17일차 ( 네트워크 , URL, Socket) (0) | 2021.04.01 |
---|---|
[KH정보교육원 당산] 16일차 ( Thread ) (0) | 2021.03.31 |
[KH정보교육원 당산] 14일차 (외부라이브러리 사용 마지막) (0) | 2021.03.29 |
[KH정보교육원 당산] 13일차 (예제 마무리 및 배운거를 토대로 시험.. ) (0) | 2021.03.26 |
[KH정보교육원 당산] 12일차 (외부 라이브러리 사용 - 엑셀파일 만들기, 설계도 구성 연습) (0) | 2021.03.25 |