[JDK 뜯어보기] Collection interface
2024. 4. 29. 11:56ㆍSpring/Java
본 글은 JDK 17을 기준으로 작성하였습니다.
java.util.Collection
Collection은 그 안에 있는 요소들을 나타낸다. 인터페이스이기 때문에 JDK는 직접적인 구현체를 제공하지는 않지만, Set, List 와 같은 더 구체적인 하위 인터페이스의 구현체들로 구현체를 제공한다.
Unmodifiable Collection
Unmodifiable Collection 이라고 해서 반드시 불변인 것은 아니다. 포함되어 있는 요소가 가변적이라면 컬렉션이 가변적일 수 있다. 하지만 모든 요소가 불변이라면 불변 Collection이라고 생각할 수 있다.
Collections.unmodifiableList()
우테코 프리코스를 경험하며 위의 메소드를 이용하여 불변 Collection으로 만드려는 것을 많이 봤다. 안에 요소가 가변적이라면 Collection이 가변적일 수도 있다는 것은 처음 알았다.
Iterable interface 를 상속 받는다
Collection 인터페이스는 Iterable 을 상속 받는다. Iterable 은 Collection의 for문 을 이용한 반복 작업을 위해 상속받은 것이다. 내가 만약 어떤 데이터 구조나 커스텀 객체를 만들었을 때 Iterable을 상속받아 iterator() 메소드를 오버라이딩 해주면 해당 객체에 대한 반복 작업을 할 수 있다.
int size()
- Return : 해당 컬렉션의 요소의 갯수를 반환한다.
- 요소 갯수가 Integer 범위 보다 크다면 Integer.MAX_VALUE 를 반환한다.
@Contract(pure=true) 는 순수함수 라는 것을 의미한다. (동일한 인자를 주었을 때 항상 같은 값을 리턴 + 외부의 상태에 영향 받지 않는 함수)
boolean isEmpty()
- Return : 요소가 없으면 true
boolean contains(Object o)
- Params : 컬렉션에서 존재 여부를 확인할 요소
- Returns : 컬렉션에 요소가 하나 이상 포함되어 있을 경우
Iterator<E> iterator()
- Loop를 이용할 수 있게 해준다.
- 순서가 보장되지 않는다.
Object[] toArray()
- 모든 요소를 담은 배열로 반환한다.
- 순서에 대한 보장이 있다면 동일한 순서로 반환해준다.
<T> T[] toArray(T[] a)
- 컬렉션의 요소를 저장할 배열이 충분한 크기를 가지면 할당되고 아니면 새 배열이 할당 된다.
String[] y = new String[SIZE];
...
y = x.toArray(y);
아래처럼 사용도 가능하다.
String[] y = x.toArray(String[]::new);
boolean add (E e)
- Params : 컬렉션에 추가하려는 요소
- Returns : 요소가 추가되어 컬렉션이 변경된 경우 true
boolean remove(Object o)
- Params : 컬렉션에서 제거하려는 요소
- Returns : 요소가 제거되어 컬렉션이 변경된 경우 true
boolean containsAll(Collection<?> c)
- Params : 현재 컬렉션에 대해 포함 여부를 확인할 다른 컬렉션
- Returns : 현재 컬렉션이 지정된 컬렉션의 모든 요소를 포함할 경우 true
boolean addAll(Collection<? extends E> c)
- Params : 현재 컬렉션에 추가하려는 요소가 포함된 다른 컬렉션
- Returns : 추가되어 현재 컬렉션이 변경되었으면 true
boolean removeAll(Collection<?> c)
- Params : 현재 컬렉션에 제거하려는 요소가 포함된 다른 컬렉션
- Retruns : 제거되어 현재 컬렉션이 변경되었으면 true
boolean removeIf(Predicate<? super E> filter)
- Params : filter - 제거할 요소를 식별하는 조건을 반환하는 프레디케이트
- Returns : 한 개 이상의 요소가 제거되었을 경우 true
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
numbers.removeIf(number -> number % 2 == 0);
boolean retainAll(Collection<?> c)
- Params : 현재 컬렉션에서 유지할 요소가 포함된 컬렉션
- Retruns : 나머지 요소가 제거되어 현재 컬렉션이 변경되었으면 true
- 현재 컬렉션에서 지정된 컬렉션에 포함되지 않은 모든 요소를 제거
void clear()
- 컬렉션의 모든 요소 제거
이외에는 equals(), hashcode() 를 통해 객체의 동등성 비교 및 stream 객체로 만들어주는 메소드를 가지고 있다.