본 게시글은 Java Api Document - Java Collections Framework (JDK 11)
에서 주로 참고할만한 내용들을 옮겨 작성하였습니다.
컬렉션에는 다음 세가지를 주요 인터페이스로 정의한다.
List<E>
Set<E>
Map<K,V>
이름 | List | Set | Map |
---|---|---|---|
순서 | 순서가 있다. | 순서가 없다. | 순서가 없다. |
중복 | 중복 허용 | 중복 허용 안함 | Key 는 중복 허용 안함, Value 는 중복 허용 |
구현 클래스 | ArrayList, LinkedList, Stack ... | HashSet, TreeSet ... | HashMap, TreeMap, Properties... |
List
와 Set
은 공통된 부분이 많아서 Collection
인터페이스로 다시 정의되어있다.
주로 사용하는 컬렉션 프레임워크의 구현 클래스들은 위 세가지 중의 한가지 인터페이스를 상속받아 구현한 클래스이다.
List와 Set의 조상이므로 List와 Set에서 사용가능하다.
int size()
컬렉션에 저장된 객체의 개수를 반환한다.
boolean add(E e)
boolean addAll(Collection<? extends E> c)
객체 e 또는 컬렉션 c의 모든 객체를 추가한다.
void clear()
컬렉션의 모든 객체를 삭제한다.
boolean remove(Object o)
boolean removeAll(Collection<?> c)
컬렉션에서 객체 o 또는 컬렉션 c에 포함된 객체들을 삭제한다. (차집합)
boolean retainAll(Collection<?> c)
컬렉션 c에 포함된 객체만을 남기고 다른 객체들은 삭제한다. (교집합)
기존 컬렉션에 변화가 있으면 true 반환
boolean contains(Object o)
boolean containsAll(Collection<?> c)
객체 o 또는 컬렉션 c가 포함되어있는지 확인한다.
boolean equals(Object o)
컬렉션과 객체를 비교하여 같은지 비교한다.
boolean isEmpty()
컬렉션이 비어있으면 true 반환
Iterator<E> iterator()
컬렉션의 요소들을 iterator로 반환한다.
Object[] toArray()
컬렉션의 요소들을 객체 배열로 반환한다.
List는 순서를 유지하고 중복을 허용한다.
배열처럼 데이터 묶음을 사용하고 싶을때 유용하다.
위에 작성한 Collection 인터페이스에서 상속받는 메서드는 작성하지 않겠다.
List.of(E e1, E e2, ... E e10)
정적 메서드로, 위와 같이 사용하면 요소 e1 ~ e10 까지를 요소로 갖는 불변 리스트를 반환한다.
void add(int index, E element)
void addAll(int index, Collection<? Extends E> c)
E 또는 컬렉션 c의 모든 요소를 지정된 위치 index에 추가한다.
Collection의 add 메서드를 확장하여 특정 위치에 추가하는 기능이 추가되었다.
E get(int index)
index 위치의 요소를 반환한다.
E set(int index, E element)
index 위치에 요소를 저장하고 원래 있던 요소를 반환한다.
E remove(int index)
index 위치의 요소를 삭제하고 반환한다.
int indexOf(Object o)
객체 o와 일치하는 첫 번째 요소의 인덱스를 반환한다.
일치하는 객체가 없을 시 -1 반환
int lastIndexOf(Object o)
객체 o와 일치하는 뒤에서 첫 번째 요소의 인덱스를 반환한다.
일치하는 객체가 없을 시 -1 반환
void sort(Comparator<? super E> c)
비교자 c로 리스트를 정렬한다.
List<E> subList(int fromIndex, int toIndex)
위치가 fromIndex 부터 toIndex -1 인 객체들을 리스트로 추출한다.
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
// 형식을 Integer로 지정하고, 5, 2 요소 두개를 넣어준 ArrayList
ArrayList<Integer> list = new ArrayList<>(List.of(5, 2));
list.add(4); // [5, 2, 4]
list.set(1, 8); // [5, 8, 4]
list.add(0); // [5, 8, 4, 0]
// 오름차순 정렬
Collections.sort(list); // [0, 4, 5, 8]
// 리스트로 향상된 for문 사용
for(int n: list) {
System.out.print(n + ", "); // "0, 5, 4, 8" 출력
}
System.out.println(list.get(3)); // 8 출력
}
}
List의 구현 클래스 ArrayList의 주요 메소드는 다음 글을 참고해주세요.
[Java] ArrayList
Set은 순서를 유지하지 않고 중복을 허용하지 않는다.
집합처럼 데이터 묶음을 사용하고 싶을때 유용하다.
위에 작성한 Collection 인터페이스에서 상속받는 메서드는 작성하지 않겠다.
Set.of(E e1, E e2, ... E e10)
이 외에는 Collection 인터페이스의 메소드와 동일하다. 하위 클래스로는 HashSet, TreeSet 등이 있다.
import java.util.HashSet;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>(List.of("1", "5", "2", "5", "4"));
Set<String> set = new HashSet<>(list);
set.add("2");
set.add("2");
System.out.println(set);
// [1, 2, 4, 5] -> 중복이 제거됐다.
}
}
중복이 제거되지만 순서는 유지하고 싶으면 HashSet 대신 LinkedHastSet 사용하면 된다.
Map은 Key와 Value를 하나의 쌍으로 묶어서 저장한다.
순서를 유지하지 않고 Key는 중복을 허용하지 않고, Value는 중복을 허용한다.
기존에 저장된 데이터와 키가 중복되는 데이터를 저장하면 기존 값이 새로운 값으로 대체된다.
Collection 인터페이스를 상속받지 않는다.
void clear()
모든 객체를 삭제한다.
V get(Object key)
key객체에 대응하는 value 객체를 찾아서 반환한다. (시간복잡도가 O(1)이다.)
V put(K key, V value)
key-value 쌍을 둘이 연결하여 추가한다.
void putAll(Map<K,V> m)
Map m의 모든 key-value 쌍을 추가한다.
boolean containsKey(Object key)
모든 요소의 Key중에 key와 일치하는 객체가 있으면 true를 반환한다.
boolean containsValue(Object value)
모든 요소의 Value중에 value와 일치하는 객체가 있으면 true 반환한다.
boolean equals(Onject o)
동일한 Map인지 비교한다.
boolean isEmpty()
비어있는지 확인한다.
Set keySet()
모든 Key 객체를 Set로 반환한다. -> key는 중복 안되므로 Set으로 반환
Collection values()
모든 value 객체를 컬렉션으로 반환한다. -> value 는 중복 가능하므로 Collecton으로 반환
V remove(Object Key)
key 객체와 일치하는 key-value 쌍을 삭제한다.
int size()
Map에 저장된 key-value 쌍의 개수를 반환한다.
Set enrtySet()
모든 Key-Value 쌍을 Map.Entry 타입의 객체로 저장한 Set를 반환한다.
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(2, "LEE");
map.put(4, "HONG");
map.put(1, "HWANG");
System.out.println(map.get(1)); // HWANG
System.out.println(map.containsKey(2)); // true
System.out.println(map.containsValue("HONG")); // true
}
}
Map 내부의 인터페이스이다. Map에 저장되는 key-value 쌍을 다루기 위해 정의되었다.
boolean equals(Object o)
K getKey()
V getValue()
V setValue(V value)