org.apache.commons.collections4
컬렉션 자료형 인터페이스
BoundedCollection<E>
- 크기 제한을 갖는 컬렉션
- isFull(), maxSize()
Bag<E>
- 컬렉션이 보유한 객체에 대한 개수를 유지한다
- 예를 들어, Bag {a, b, c, a} 인스턴스에 대해 getCount(a) == 2, uniqueSet() == {a, b, c}
- Bag의 일부 메서드는 Collection API와 다르게 작동하므로, Collection으로 참조하지 않을 것을 권장하고 있다
↓ java
SortedBag<E>
Comparator<? super E>를 이용해 원소 정렬
MultiSet<E>
Bag과 유사하지만, Collection API를 좀 더 적절하게 따른다
IterableMap<K, V>
엔트리 집합을 만들지 않고 MapIterator를 지원
IterableSortedMap<K, V>
Goto - SortedMap + Goto - OrderedMap
BoundedMap<K, V>
크기 제한이 있는 맵
BidiMap<K, V>
- 키와 값이 일대일 대응을 만족하도록 강제하여, 값을 통한 키의 탐색이 가능하게 한다
- 값을 통한 키의 탐색은 키를 통한 값의 탐색과 동일한 성능으로 이루어져야 한다
- 키와 값의 위치를 뒤집은 BidiMap을 반환하는 inverseBidiMap() 연산도 지원한다
SortedBidiMap<K, V>
키, 값 모두에 대한 Comparator를 갖고 있어, inverseBidiMap() 또한 SortedBidiMap
MultiValuedMap<K, V>
- 키에 대한 값들을 컬렉션에 보관하는 맵을 정의한다
- 키를 통해 얻은 컬렉션의 변경 가능 여부는 구현에 따라 다를 수 있다
- ListValuedMap<K, V> + SetValuedMap
OrderedMap<K, V>
키를 정렬하여 보존하고, 앞뒤로 순회 가능한 맵
OrderedBidiMap<K, V>
inverseBidiMap() 또한 OrderedBidiMap
Trie<K, V>
Prefix tree에 대해 정의한다

컬렉션 연산 인터페이스
Unmodifiable
컬렉션 변경 연산이 제공되지 않음을 표시하는 마커 인터페이스
Get<K, V>
Map 인터페이스의 읽기 기능에 대한 정의를 담고 있다. 라고 적혀있지만 remove(Object) 메서드는 여기에 있다
IterableGet<K, V>
이 인터페이스를 구현한 Map은 mapIterator() 메서드를 통해 MapIterator<K, V>를 제공한다
Put<K, V>
Map 인터페이스의 쓰기 기능에 대한 정의를 담고 있다. Put(K, V)는 V가 아닌 Object를 반환함에 유의
FluentIterable<E>
Stream과 유사한 기능을 제공하는 Iterable
↓ java
OrderedIterator<E>
역방향 순회를 추가로 지원한다
MapIterator<K, V>
- 이 인터페이스를 제공하는 Map은 내부에서 데이터를 Entry 객체로 유지하지 않는다(불필요한 객체 생성 방지).
- remove(), setValue() 연산은 구현에 따라 지원하지 않을 수 있다
Entry 대신 키를 이용해 순회
OrderedMapIterator<K, V>
OrderedMap에 대한 MapIterator
ResettableIterator<E> ResettableListIterator
reset() : Iterator가 생성됐을 때 초기 위치로 돌아간다
유틸리티 클래스
BagUtils
↓ java
CollectionUtils
↓ java
IterableUtils
+ IteratorUtils. 접합, 변환, 순회 관련 다양한 유틸리티 제공
ListUtils
↓ java
MapUtils
↓ java
MultiMapUtils
↓ java
SetUtils
↓ java
...bag
- HashBag<E>
- TreeBag<E>
- CollectionBag<E> CollectionSortedBag
- UnmodifiableBag<E> UnmodifiableSortedBag
- PredicatedBag<E> PredicatedSortedBag
- SynchronizedBag<E> SynchronizedSortedBag
- TransformedBag<E> TransformedSortedBag
저장소로 HashMap을 이용하는 표준 Bag 구현을 제공한다
저장소로 TreeMap을 이용하는 표준 SortedBag 구현을 제공한다
Bag 인스턴스가 Collection API에 맞게 동작하도록 래핑하는 생성자를 제공한다
Bag 인스턴스가 변경되지 않도록 래핑하는 장식자 메서드를 제공한다
Bag 인스턴스에 요소 추가 제약을 거는 장식자 메서드를 제공한다. 요소 추가에 실패하는 경우 IllegalArgumentException 발생
Bag 인스턴스가 스레드-안전하도록 래핑하는 장식자 메서드를 제공한다
Bag 인스턴스의 요소 변환 제약을 거는 장식자 메서드를 제공한다. 기존 요소를 포함하여 변환하는 경우 transformedBag(...), 신규 요소들만 변환하는 경우 transformingBag(...)
...bidimap
- DualHashBidiMap<K, V>
- TreeBidiMap<K
- UnmodifiableBidiMap<K, V> UnmodifiableOrderedBidiMap, UnmodifiableSortedBidiMap
2개의 HashMap 인스턴스를 이용한 BidiMap 구현을 제공한다
키, 값이 모두 정렬 가능할 때, red-black 트리를 이용한 BidiMap 구현을 제공한다
인스턴스가 변경되지 않도록 래핑하는 장식자 메서드를 제공한다
...collection
- CompositeCollection<E>
- IndexedCollection<K, C>
- PredicatedCollection<E>
- SynchronizedCollection<E>
- TransformedCollection<E>
- UnmodifiableCollection<E> UnmodifiableBoundedCollection
다른 컬렉션(들)에 대해 하나의 뷰를 제공하는 장식자 컬렉션 구현. 뷰에 대한 add/remove 연산이 기저 컬렉션에 적용돼야 한다면 CompositeCollection.CollectionMutator를 제공해야 한다
컬렉션에 대해 맵과 비슷한 뷰를 제공하는 장식자 컬렉션 구현. 뷰에 대한 변경은 키와 기저 컬렉션에 자동으로 반영되지만, 기저 컬렉션이 직접 변경된 경우 reindex()를 통해 직접 동기화해야 한다
컬렉션에 대해 삽입 제약을 거는 장식자 컬렉션 구현. Builder 팩터리 클래스도 제공한다
컬렉션이 스레드-안전하도록 래핑하는 장식자 메서드를 제공한다
컬렉션에 요소 변환 제약을 거는 장식자 메서드를 제공한다. 기존 요소를 포함하여 변환하는 경우 transformedCollection(...), 신규 요소들만 변환하는 경우 transformingCollection(...)
컬렉션이 변경되지 않도록 래핑하는 장식자 메서드 제공
...iterators
- ArrayIterator<E>
- ArrayListIterator<E>
- ListIteratorWrapper<E>
- PeekingIterator<E>
- LoopingIterator<E> LoopingListIterator
- SingletonIterator<E> SingletonListIterator
- ReverseListIterator<E>
- PushbackIterator<E>
- EnumerationIterator<E>
- TransformIterator<I, O>
- EntrySetMapIterator<K, V>
- EmptyIterator<E>
- BoundedIterator<E>
- FilterIterator<E> FilterListIterator, UniqueFilterIterator
- CollatingIterator<E>
- PermutationIterator<E>
배열에 대한 이터레이터 제공
배열에 대한 ListIterator 프로토콜 제공)
요소들을 캐싱하여 Iterator를 ResettableIterator로 래핑
next()를 취소할 수 있다. next()에서 반환하지 않은 객체도 pushback()으로 넣을 수 있으며, 래핑된 실제 iterator에는 영향을 끼치지 않는다
Enumeration이 이터레이터로 동작하도록 하는 어댑터 제공 + IteratorEnumeration, IteratorIterable
맵의 entrySet을 이용한 MapIterator 구현 제공
+ EmptyListIterator, EmptyMapIterator, EmptyOrderedIterator, EmptyOrderedMapIterator, UnmodifiableIterator, UnmodifiableListIterator, UnmodifiableMapIterator, UnmodifiableOrderedMapIterator
다른 이터레이터의 특정 범위만 조회하는 래퍼를 제공. + SkippingIterator
여러 이터레이터들을 특정 순서대로 소비하는 래퍼를 제공. + ZippingIterator(각 이터레이터 1개씩 순회 조회), IteratorChain(넘겨진 순서대로 소비), LazyIteratorChain
순열을 순회하는 이터레이터를 제공한다
...keyvalue
- MultiKey<K>
- DefaultKeyValue<K, V>
- TiedMapEntry<K, V>
- UnmodifiableMapEntry<K, V>
여러 키 값을 하나의 키로 이용할 수 있게 해준다. 이를 통해 다중 맵을 이용하지 않고 문제를 해결할 수 있다
Map.Entry를 구현하지 않는 키-값 쌍 기능 제공. 키와 값이 null일 수 있다. + DefaultMapEntry
맵과 결합된 Map.Entry. 값을 변경하면 기저 맵에 반영된다
...list
- CursorableLinkedList<E>
- FixedSizeList<E>
- GrowthList<E>
- LazyList<E>
- PredicatedList<E> TransformedList
- SetUniqueList<E>
- TreeList<E>
- UnmodifiableList<E>
ListIterator를 통한 동시 수정이 가능한 리스트 구현을 제공한다. listIterator(), cursor() 메서드로 Cursor 객체를 얻을 수 있다
기저 리스트 크기 고정 <- 추가/제거 거부
리스트의 크기를 벗어난 인덱스에 대한 add/set 호출이 있을 때, 빈 영역을 자동으로 null로 채운다. 음수 인덱스에 대해서는 IndexOutofBoundsException 발생
리스트의 크기를 벗어난 인덱스에 대한 get 요청에 대해, 빈 영역은 null로 채우고, 특정 인스턴스를 할당하고 반환한다. 리스트 내 get 반환하려는 요소가 null인 경우, 새로 할당 시도한다
임의 인덱스 삽입/제거에 최적화된 리스트 구현 제공. add, get, iterator만 이용한다면 ArrayList가 좋다
...map
- CaseInsensitiveMap<K, V>
- CompositeMap<K, V>
- DefaultedMap<K, V> LazyMap, LazySortedMap
- FixedSizeMap<K, V> FixedSizeSortedMap
- Flat3Map<K, V>
- HashedMap<K, V>
- LinkedMap<K, V>
- ListOrderedMap<K, V>
- LRUMap<K, V>
- MultiKeyMap<K, V>
- PassiveExpiringMap<K, V>
- PredicatedMap<K, V> PredicatedSortedMap, TransformedMap, TransformedSortedMap
- ReferenceIdentityMap<K, V>
- StaticBucketMap<K, V>
- SingletonMap<K, V>
- UnmodifiableEntrySet<K, V>
- EntrySetToMapIteratorAdapter<K, V>
키의 삽입, 비교 시 모두 소문자로 변환되어 연산
여러 맵들에 대해 하나의 뷰를 제공하는 장식자 맵 제공. 뷰에 대한 삽입/삭제 연산이 기저 맵에 적용되야 한다면 CompositeMap.MapMutator를 제공하면 된다
기저 맵에 존재하지 않는 키에 대한 대체값 제공
기저 맵 크기 고정 <- 추가/제거 거부
요소가 3개 이하일 때 최적으로 동작하는 맵 제공
HashMap + MapIterator + Cloneable
LinkedHashMap + MapIterator + Cloneable
삽입 순서를 List에 보존
임계 크기를 초과하면 가장 오래 전 사용(get/put)된 entry 제거. DEFAULT_MAX_SIZE == 100
맵에 entry를 유지할 시간을 정의. 각 시간이 지나면 맵에서 제거된다
키, 값의 GC를 허용(선택적)하고, equals() 대신 ==로 일치를 판별하는 맵을 제공한다. + ReferenceMap
주어진 한도 내에서는 고성능의 스레드-안전한 java.util.Map 구현을 제공한다. 크기가 한도를 벗어나면 O(n)에 가까워진다
변결할 수 없는 entry 집합을 반환하는 장식자 메서드 제공 + UnmodifiableMap, UnmodifiableOrderedMap, UnmodifiableSortedMap
...multimap
- ArrayListValuedHashMap<K, V>
- HashSetValuedHashMap<K, V>
- TransformedMultiValuedMap<K, V>
- UnmodifiableMultiValuedMap<K, V>
...multiset
- HashMultiSet<E>
- PredicatedMultiSet<E>
- SynchronizedMultiSet<E>
- UnmodifiableMultiSet<E>
...queue
- CircularFifoQueue<E>
- PredicatedQueue, SynchronizedQueue, TransformedQueue, UnmodifiableQueue
고정 크기 큐. 가득 찬 상태에서 add() 시 가장 마지막 요소가 null이면 덮어쓴다
...set
- CompositeSet<E>
- ListOrderedSet<E>
- MapBackedSet<E, V>
- PredicatedSet, PredicatedSortedSet, PredicatedNavigableSet, TransformedSet, TransformedSortedSet, TrnasformedNavigableSet, UnmodifiableSet, UnmodifiableSortedSet, UnmodifiableNavigableSet
여러 셋에 대한 하나의 뷰를 제공. 뷰에 대한 연산이 기저 셋에 적용돼야 한다면 CompositeSet.SetMutator를 제공해야 한다
원소 삽입 순서를 보존한다. 같은 원소에 대해 2번째 add 호출이 있는 경우, 1번째 위치를 유지한다
Map을 Set처럼 이용하게 해준다
- © Donggi Kim. MIT License
- w3css : No license
- highlight.js : BSD-3-Clause License
- MathJax : Apache License 2.0
- qrcodejs : MIT License