JAVA

[Java] Collection - List

lakelight 2022. 9. 19. 19:20
728x90
반응형

Collection

Java Collection의 주요 인터페이스는 List, Set, Map이 있습니다. 인터페이스를 구분하는 가장 중요한 개념은 "순서", "데이터 중복 여부" 입니다.

  • List - 순서가 있고, 데이터 중복이 가능합니다.
  • Set - 순서가 없고, 데이터 중복이 불가능합니다.
  • Map - Key, Value 구조로 데이터가 저장되고, Key는 중복이 불가능하지만 Value는 중복이 가능합니다.

이미지 출처: https://memostack.tistory.com/234

 

List

List는 데이터를 순서에 맞게 일렬로 구성합니다. 인덱스가 부여되기 때문에 인덱스로 데이터를 검색할 수 있습니다. 그리고 List는 Set과 다르게 중복을 허용합니다.

 

List 인터페이스를 구현한 클래스 종류

  1. ArrayList
  2. AttributeList
  3. CopyOnWriteArrayList
  4. LinkedList
  5. RoleList
  6. RoleUnresolvedList
  7. Stack
  8. Vector

 

List 인터페이스를 구현한 ArrayList

ArrayListresizable-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

ArrayListLinkedList보다 검색적인 부분에서 더 빠릅니다. 또한 순차적으로 데이터를 배열에 추가, 삭제할 수 있기 때문에 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)

 

[참고]

1.  Collection - List, Set, Map

728x90
반응형

'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