본문 바로가기
Hello World/JAVA

JAVA - Collection Framework 컬렉션 자료구조 [개발스터디 기몬]

by 기몬 2023. 4. 25.
728x90
반응형

컬렉션 프레임워크 
- 널리 알려진 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 
관련 인터페이스와 클래스들을 포함시켜 놓은 java.util 패키지
- 주요 인터페이스 : List, Set, Map 
Collection : List, Set / Map

(Collection)List - ArrayList / Vector / LinkedList ( 각 리스트 분류에는 성능에 따른 차이가 있다.)
list 특징 : 순서를 유지하고 저장 , 중복 저장 가능
(Collection)Set - HashSet / TreeSet 
set 특징 : 순서를 유지하지 않고 저장 , 중복 저장 불가
Map -  HashMap / Hashtable / TreeMap / Properties
map 특징 : 키와 값으로 구성된 엔트리 저장 , 키는 중복 저장 안됨

List Collection 리스트 컬렉션 
-  객체를 인덱스로 관리하기때문에 객체를 저장하면 인덱스가 부여되고
인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공
객체 추가 - boolean add(E e) : 주어진 객체를 맨 끝에 추가 
- void add(int index, E element) : 주어진 인텍스에 객체를 추가 
- set(int index, E element) : 주어진 인텍스의 객체를 새로운 객체로 바꿈

객체 검색 - boolean contains(Object o) : 주어진 객체가 저장되어 있는지 여부 
- E get(int index) : 주어진 인덱스에 저장된 객체를 리턴
- isEmpty() : 컬렉션이 비어있는지 조사
- int size() : 저장되어 있는 전체 객체 수를 리턴 

객체 삭제 - void clear() : 저장된 모든 객체를 삭제
- boolean remove(Object o) : 주어진 객체를 삭제 

 

List collection - ArrayList, Vector, LinkedList

ArrayList 
- ArrayList에 객체를 추가하면 내부 배열에 객체가 저장되고 제한 없이 객체를 추가할 수 있음
- 객체의 번지를 저장. 동일한 객체를 중복 저장 시 동일한 번지가 저장. null 저장 가능
- ArrayList 컬렉션에 객체를 추가 시 인덱스 0번부터 차례대로저장
- 특정 인덱스의 객체를 제거하거나삽입하면 전체가 앞/뒤로 1씩 당겨지거나 밀림
- 빈번한 객체 삭제와 삽입이 일어나는 곳에선 바람직하지않음

Vector
- 동기화된 메소드로구성되어 있어 멀티 스레드가동시에 Vector() 메소드를 실행할 수 없음
- 멀티 스레드 환경에서는 안전하게객체를 추가 또는 삭제할 수 있음

LinkedList
- 인접 객체를 체인처럼 연결해서 관리. 객체 삭제와 삽입이 빈번한 곳에서 ArrayList보다 유리

-------------------
Set 컬렉션
-  Set 컬렉션은저장 순서가 유지되지않음
-  객체를 중복해서 저장할 수 없고, 하나의 null만 저장할 수 있음(수학의집합 개념)

HashSet
- 동등 객체를 중복 저장하지않음
- 다른 객체라도 hashCode() 메소드의 리턴값이같고, equals() 메소드가true를 리턴하면
동일한 객체라고 판단하고중복 저장하지않음

 

Map 컬렉션 
- 동등 객체를 중복 저장하지않음
- 다른 객체라도 hashCode() 메소드의 리턴값이같고, 
equals() 메소드가true를 리턴하면 동일한 객체라고 판단하고중복 저장하지않음
- iterator() 메소드: 반복자를 얻어 Set 컬렉션의 객체를 하나씩 가져옴

Map 컬렉션
- 키와 값으로 구성된 엔트리 객체를 저장
- 키는 중복 저장할 수 없지만 값은 중복 저장할 수 있음. 기존에 저장된 키와 동일한 키로 값을
저장하면 새로운 값으로 대치

객체 추가  V put(K key, V value)  -주어진 키와 값을 추가, 저장이 되면 값을 리턴.

객체 검색 boolean containsKey(Object ket)  - 주어진 키가 있는지 여부
boolean containValue(Object value  - 주어진 값이 있는지 여부
Set<Map.Entry<K,V>>entrySet()  - 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴
V get(Object key)  - 주어진 키의 값을 리턴
boolean isEmpty()  - 컬렉션이 비어있는지 여부
Set<K> keySet()  - 모든 키를 Set 객쳉에 담아서 리턴
int size()   - 저장된 키의 총 수를 리턴
Collection<V> values()  - 저장된 모든 값을 Collection에 담아서 리턴 

객체 삭제 void clear() - 모든 Map.Entry(키와 값)을 삭제
V remove(Object key)  - 주어진 키와 일치하는 Map.Entry 삭제, 삭제가 되면 값을 리턴



HashMap
- 키로 사용할 객체가 hashCode() 메소드의 리턴값이 같고 equals() 메소드가 true를 리턴할 경우
동일 키로 보고 중복 저장을 허용하지 않음

Hashtable
- 동기화된 메소드로구성되어 있어 멀티 스레드가동시에 Hashtable의 메소드들을실행 불가
- 멀티 스레드 환경에서도 안전하게객체를 추가, 삭제할 수 있다. 

Properties
- 주로 확장자가 .properties인 프로퍼티 파일을 읽을 때 사용
- 프로퍼티 파일은 키와 값이 = 기호로 연결된 텍스트 파일(ISO 8859-1 문자셋, 한글은 \u+유니코드)
- Properties 객체를 생성하고, load() 메소드로 프로퍼티파일의 내용을 메모리로 로드



검색 기능을 강화시킨 컬렉션
TreeSet
- 이진 트리를 기반으로 한 Set 컬렉션
- 여러 개의 노드가 트리 형태로 연결된 구조. 루트 노드에서 시작해 각 노드에 최대 2개의 노드를
연결할 수 있음
- TreeSet에 객체를 저장하면 부모 노드의 객체와 비교해서 낮은 것은 왼쪽 자식 노드에, 높은 것은
오른쪽 자식 노드에 저장


Comparable과 Comparator
- TreeSet에 저장되는 객체와 TreeMap에 저장되는 키 객체를 정렬
-  Comparable 인터페이스에는compareTo() 메소드가정의. 
사용자 정의 클래스에서이 메소드를 재정의해서비교 결과를 정수 값으로 리턴
- 비교 기능이 없는 Comparable 비구현 객체를 저장하려면비교자 Comparator를 제공
- 비교자는 compare() 메소드를재정의해서 비교 결과를 정수 값으로 리턴

LIFO와 FIFO 컬렉션
후입선출과 선입선출
- 후입선출(LIFO): 나중에 넣은 객체가 먼저 빠져나가는 구조
- 선입선출(FIFO): 먼저 넣은 객체가 먼저 빠져나가는구조
- 컬렉션 프레임워크는LIFO 자료구조를제공하는 스택 클래스와 FIFO 자료구조를 제공하는큐
인터페이스를제공

Stack
- Stack 클래스: LIFO 자료구조를구현한 클래스

Queue
- Queue 인터페이스: FIFO 자료구조에서사용되는 메소드를정의
- LinkedList: Queue 인터페이스를구현한 대표적인 클래스


동기화된 컬렉션
- 동기화된 메소드로구성된 Vector와 Hashtable는멀티
스레드 환경에서 안전하게요소를 처리
- Collections의 synchronizedXXX() 메소드: ArrayList, 
HashSet, HashMap 등 비동기화된메소드를 동기화된
메소드로 래핑


수정할 수 없는 컬렉션
- 요소를 추가, 삭제할 수 없는 컬렉션. 컬렉션 생성 시 저장된 요소를 변경하고싶지 않을 때 유용
- List, Set, Map 인터페이스의정적 메소드인 of()로 생성
- List, Set, Map 인터페이스의정적 메소드인 copyOf()을 이용해 기존 컬렉션을 복사
- 배열로부터수정할 수 없는 List 컬렉션을 만듦

 

LIFO와 FIFO 컬렉션
후입선출과 선입선출
- 후입선출(LIFO): 나중에 넣은 객체가 먼저 빠져나가는 구조
- 선입선출(FIFO): 먼저 넣은 객체가 먼저 빠져나가는구조
- 컬렉션 프레임워크는LIFO 자료구조를제공하는 스택 클래스와 FIFO 자료구조를 제공하는큐
인터페이스를제공

Stack
- Stack 클래스: LIFO 자료구조를구현한 클래스
리턴타입  메소드  설명
E push( E item )  주어진 객체를 스택에 넣는다. 
E pop() 스택의 맨 위 객체를 빼낸다.
Queue
- Queue 인터페이스: FIFO 자료구조에서사용되는 메소드를정의
- LinkedList: Queue 인터페이스를구현한 대표적인 클래스
리턴타입  메소드  설명
boolean offer( E e )  주어진 객체를 큐에 넣는다. 
E poll() 큐에서 객체를 빼낸다.

동기화된 컬렉션
- 동기화된 메소드로구성된 Vector와 Hashtable는멀티
스레드 환경에서 안전하게요소를 처리
- Collections의 synchronizedXXX() 메소드: ArrayList, 
HashSet, HashMap 등 비동기화된메소드를 동기화된
메소드로 래핑


수정할 수 없는 컬렉션
- 요소를 추가, 삭제할 수 없는 컬렉션. 컬렉션 생성 시 저장된 요소를 변경하고싶지 않을 때 유용
- List, Set, Map 인터페이스의정적 메소드인 of()로 생성
- List, Set, Map 인터페이스의정적 메소드인 copyOf()을 이용해 기존 컬렉션을 복사
- 배열로부터수정할 수 없는 List 컬렉션을 만듦

 


java 컬렉션 프레임워크는 일반적으로 재사용 가능한 
컬렉션 데이터 구조를 구현하는 클래스 및 인터페이스 집합. 
프레임워크라고 하지만 라이브러리 방식으로 작동. 
컬렉션 프레임워크는 다양한 컬렉션을 
정의하는 인터페이스와 컬렉션을 구현하는 클래스를 모두 제공

배열을 한번 설정하면 배열의 크기를 변경할 수 없지만 list는 변경 설정이 가능하다. 
list 분류에는 각각의 리스트별로 성능에 따른 차이가 있다 // 대표적으로 속도
List 의 특징 : 순서를 유지하고 저장 / 중복 저장 가능 / ( 구현 클래스 : ArrayList, Vector, LinkedList )
List의 CRVD 성능은 각기 다르다 

 

List 구현객체 메소드 - ArrayList/ Vector/ LinkedList
CRUD - Create, Read, Update, Delete

set collection = index가 없어 순서유지가 되지않음 
저장 또는 수정 되지 않는다 수정의 연산 불필요. 
삭제하고 생성한다 중복저장 불가. 하나의 null만 저장 . 

set 자료구조 확인 중복을 제거하고 저장 . 

 

= list, set, map 

LIFO (Last in First Out) : 마지막에 들어간 것이 처음으로 나온다.
LIFO  = > stack 


FIFO(First in First Out) : 처음 들어간 데이터가 처음으로 나온다.
FIFO => queue

 

https://github.com/Gimoni/JAVA_Python_Android/commit/1e97fd9c4ae493227d7866139cdd83e0453a1f0c

728x90
반응형

댓글