Collection
Java Collection의 주요 인터페이스는 List, Set, Map이 있습니다. 인터페이스를 구분하는 가장 중요한 개념은 "순서", "데이터 중복 여부" 입니다.
- List - 순서가 있고, 데이터 중복이 가능합니다.
- Set - 순서가 없고, 데이터 중복이 불가능합니다.
- Map - Key, Value 구조로 데이터가 저장되고, Key는 중복이 불가능하지만 Value는 중복이 가능합니다.
List
List는 데이터를 순서에 맞게 일렬로 구성합니다. 인덱스가 부여되기 때문에 인덱스로 데이터를 검색할 수 있습니다. 그리고 List는 Set과 다르게 중복을 허용합니다.
List 인터페이스를 구현한 클래스 종류
- ArrayList
- AttributeList
- CopyOnWriteArrayList
- LinkedList
- RoleList
- RoleUnresolvedList
- Stack
- Vector
List 인터페이스를 구현한 ArrayList
ArrayList는 resizable-arraay입니다. 즉, 저장 용량이 자동으로 늘어납니다. 기본 생성자로 ArrayList를 생성하면 10개의 객체 저장 용량을 갖습니다. 물론, 처음부터 용량을 크게 잡을 수도 있습니다.
List list = new ArrayList(100); //초기에 100개의 저장 용량을 가지도록 설정했습니다.
list.add("Hello, LakeLight"); //데이터를 저장합니다.
String output = (String)list.get(0); //데이터를 String으로 변환하여 불러옵니다.
ArrayList는 Object 타입으로 변환되어 저장되기 때문에, 모든 종류의 객체를 저장할 수 있습니다. 하지만, 저장 및 조회할 때 Object로 변환해야 하기 때문에 성능이 좋지 않습니다. 이런 단점을 보완하는 것이 바로 제네릭 입니다.
List<String> list = new ArrayList<String>(); //String 객체 만을 저장하는 List
list.add("Hello, LakeLight"); //데이터를 저장합니다.
String output = list.get(0); //데이터를 String으로 변환하지 않고 불러옵니다.
ArrayList와 LinkedList
ArrayList는 LinkedList보다 검색적인 부분에서 더 빠릅니다. 또한 순차적으로 데이터를 배열에 추가, 삭제할 수 있기 때문에 ArrayList가 더 좋은 성능을 보입니다.
반면에, 배열의 중간 위치에 데이터를 추가할 때 LinkedList는 Array 크기를 조정하거나, 인덱스를 업데이트 할 필요 없기 대문에 ArrayList보다 더 빠릅니다.
하지만, LinkedList는 앞뒤 두개의 참조를 저장하기 때문에 ArrayList보다 더 많은 메모리 영역을 차지할 것입니다.
List의 교집합, 차집합, 합집합
두 List 사이에 공통 데이터를 찾는 메서드를 알아보겠습니다.
- addAll: 두 리스트의 모든 객체를 저장합니다.
- removeAll: 두 리스트의 공통으로 포함된 객체를 제거합니다.
- retainAll: 두 리스트의 공통으로 포함된 객체만 남기고 제거합니다.
Read-Only List
Collections 클래스의 unmodifiableList 메서드를 사용하여, 읽기만 가능한 List를 생성할 수 있습니다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> lakeLightList
= Collections.unmodifiableList(new ArrayList<>(Arrays.asList("Hi", "My", "Name", "Is", "LakeLight")));
lakeLightList.add("Hello");
}
}
*예외 발생*
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.Collections$UnmodifiableCollection.add(Collections.java:1067)
at Main.main(Main.java:12)
Sorting List
Collections 클래스는 Sorting을 위해서, 아래와 같은 Static 메서드를 제공합니다.
- sort(List<T> list)
- sort(List<T> list, Comparator<? super T> c)
[참고]
'JAVA' 카테고리의 다른 글
[Java] Collection - Map (0) | 2022.09.19 |
---|---|
[Java] Collection - Set (0) | 2022.09.19 |
[Java] JDK 동적 프록시 (0) | 2022.08.24 |
[Java] Reflection (0) | 2022.08.24 |
[Java] Facade Pattern (0) | 2022.08.01 |