일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- lambda calculus
- 프로그래머스
- Collection
- tcp
- JDBC
- 로버트마틴
- 백준
- 스택
- DesignPattern
- 디자인패턴
- Collections
- 겨울카카오인턴
- Spring
- Java
- Python
- javscript
- functional programming
- 람다 칼큘러스
- Eclipse
- 큐
- solid
- 함수형 프로그래밍
- 파이썬
- Rails
- 자바
- JavaScript
- design-pattern
- exception
- Pattern
- Network
- Today
- Total
개발자 노트
Collection 정리 - Collection Interface 본문
관련 글
- java docs
- Collection 정리[상위 문서]
Collection이란?
elements들의 그룹을 나타냅니다.
Collection interface
가장 일반화된 collections를 전달하는데 사용됩니다.
예 - HashSet의 conversion consturctor
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
주어진 collection의 elements를 지닌 HashSet을 생성하는 생성자입니다.
List든, Set이든 HashSet에 옮겨 담고 싶은 elements를 지닌 Collection이기만 하면 되니까 Collection type으로 선언된 것이죠.
Collection interface의 메서드
아주 기본적인 연산을 정의하고 있습니다.
int size()
boolean isEmpty()
boolean contains(Object element)
boolean add(E element)
boolean remove(Object element)
Iterator<E> iterator()
또한, 모든 collection에 대해 동작하는 method도 정의하고 있죠.
containsAll(Collection<?> c)
boolean addAll(Collection<? extends E> c)
boolean removeAll(Collection<?> c)
boolean retainAll(Collection<?> c)
void clear()
array operations를 위한 메서드
Object[] toArray()
<T> T[] toArray(T[] a)
Stream API를 위한 method
Stream<E> stream()
Stream<E> parallelStream()
Collection 메서드 동작들은 생각하는 그대로!
elements group이 있다면 어떤 동작을 원할까요?
- elements들이 얼마나 있니?
- size, isEmpty
- 주어진 element가 존재하니?
- contains
- group으로 부터 element를 추가하거나 삭제
- add, remove
- group의 elements들을 조회하기
- iterator
add, remove method의 설계
중복이든 아니든 일반적으로 사용될 수 있도록 설계되었습니다.
add method 호출한 뒤 collection에 element가 추가되었다? (collection에 변화가 생겼다.) → true 반환
이미 있었다. (collection에 변화가 없다) → false 반환
Traversing Collections
Aggregate Operations
stream과 aggregate를 통해 collection 조회가 가능합니다.
myShapesCollection.stream()
.filter(e -> e.getColor() == Color.RED)
.forEach(e -> System.out.println(e.getName()));
String joined = elements.stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
Collections framework의 Bulk Operation과의 차이점
- stream api는 immutable하다.
for-each Construct
간단하게 collection을 순회할 수 있습니다.
for (Object o : collection)
System.out.println(o);
Iterators
collection을 순회하면서 삭제까지 할 수 있습니다!
public interface Iterator<E> {
boolean hasNext();
E next();
void remove(); //optional
}
- hasNext
- elements가 더 있다면 true, 없다면 false 반환
- next
- interation에서 다음 element 반환
- remove
next
에 의해 반환된 elements 중 마지막 element를 삭제next
호출 마다 반드시 1번만 호출되어야 하며, 더 호출될 경우 exception을 던짐.
Iterator.remove 만이 collection을 순회하는 중에 collection을 안전하게 수정할 수 있는 유일한 방법
Iterator를 사용해야 하는 경우
- 현재 element를 삭제할 때. for-each는 삭제불가. 즉, filtering에는 for-each를 사용하면 안됨
- 병렬적으로 여러 collection을 순회할 때.
임의의 Collection을 filtering하는 코드
static void filter(Collection<?> c) {
for (Iterator<?> it = c.iterator(); it.hasNext(); )
if (!cond(it.next()))
it.remove();
}
Collection interface Bulk Operations
BulkOperation은 모든 Collection에 대해 동작합니다.
target Collection: 메서드 호출하는 collection
specified Collection: 메서드 호출시 전달하는 argument
종류
- containsAll
- target Collection이 specified Collection에 있는 elements를 모두 가지고 있는 경우 true를 반환합니다.
- addAll
- specified Collecition의 모든 elements를 target Collection에 추가합니다.
- removeAll
- target Collection에 존재하는 specifiec Collection의 elements를 삭제합니다.
- retainAll
- specified Collection에 존재하지 않은 element들을 모두 삭제합니다. (교집합의 원소만 남긴다는 의미)
- clear
- Collection의 모든 elements를 삭제합니다.
이것저것
- addAll, removeAll, retainAll methods는 target Collection이 수정됬을 경우 true를 반환합니다.
- collection에서 1개의 원소를 삭제하는 코드
c.removeAll(Collections.singleton(e));
- null element 삭제하는 방법
c.removeAll(Collections.singleton(null));
Collection Interace Array Operations
toArray method는 collections와 older APIs간의 bridge로써 제공됩니다.
(old APIs는 arrays를 input으로 받습니다.)
Collection의 elements들을 array로 변환시켜줍니다.
simple form
Object[] a = c.toArray();
Object 타입의 배열을 반환합니다.
complex form
String[] a = c.toArray(new String[0]);
caller가 output array의 runtime type을 결정합니다. 이 코드에선 c가 Collection<String>
으로, String element만 존재한다고 알 수 있기 때문에 String array를 반환하도록 new String[0]
을 argument로 제공합니다.
'컴퓨터 언어 > Java' 카테고리의 다른 글
stream api - peek (0) | 2022.12.13 |
---|---|
Collection 정리 - Set Interface (2) | 2022.07.14 |
Collection 정리 - Implementations (0) | 2022.07.04 |
Collections정리 - Interfaces (0) | 2022.06.30 |
Collection 정리 (0) | 2022.06.30 |