Java Collection - List

Viperse·2023년 11월 27일

프로젝트 한창 할 때는 정말 웹을 위한 개발을 하느라... Collection을 제대로 사용하지 못했더니 혹시라도 잊었을까 봐 복기 겸 정리를 하려고 마음 먹음


Collection이란?

  • 자바에서 제공하는 자료구조를 담당하는 프레임워크
  • java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들이 포함
  • 컬렉션을 사용하면 데이터 추가, 삭제, 정렬 등의 처리가 간단하게 해결되어 자료구조적 알고리즘을 구현할 필요가 없다는 장점
  • List, Set, Vector, Stack, Queue, Map, Properties가 해당

List

  • 중복 허용
  • 순서 있음
ArrayList<Vo> list = new ArrayList<>();

<>

  • 제네릭스(Generics), 컴파일 시 타입을 체크해 주는 기능
  • 명시된 타입의 객체만 저장하도록 제한을 두기 위해 사용

활용되는 기본 메서드 정리

// 1. add(E e) 리스트 끝에 추가
list.add(new Vo(1, 2));

// 2. add(int index, E, e) : 인덱스를 지정하여 해당 인덱스에 추가
list.add(1, new Vo(1, 2));

// 3. set(int index, E, e) : 해당 인덱스의 값을 변경
list.set(1, new Vo(3, 4));

// 4. size() : 리스트 안에 몇 개의 데이터가 있는지 (리스트 길이)
list.size();

// 5. remove(int index) : 해당 인덱스의 객체 삭제
list.remove(0);

// 6. get(int index) : 해당 인덱스로 객체 가져오기
list.get(0);

// 7. subList(int index1, int index2) : 추출해서 새로운 List로 반환
list.subList(0, 1);

// 8. addAll(Collection c) : 컬렉션을 통째로 뒤에 추가하는 메소드
list.addAll(sub);

// 9. isEmpty() : 컬렉션이 비어있는지 묻는 메소드
list.isEmpty(); // true or false

// 10. clear() : 전부 비우기
list.clear();

// 11. 오름차순 정렬
Collections.sort(list);

// 12. 내림차순 정렬
Collections.reverse(list);

// 13. clone() : 리스트 복제
list.clone();

배열과 List 상호 변환

  • 배열 -> List
String[] arr = {"a", "b", "c"};

// list 값의 추가나 변경 없이 사용할 경우
List<String> list1 = Arrays.asList(arr); 
List<String> list2 = new ArraysList<>(Arrays.asList(arr));
// stream에서 지원
List<String> list3 = Stream.of(arr).collect(Collectors.toList);

list1처럼 배열을 변경하여 사용할 경우 add나 remove 같은 메소드를 사용하려면 Exception이 발생하기 때문에 list2와 같이 변경해서 사용해야 한다.

  • List -> 배열
ArrayList<String> list = new ArrayList<String>();

int arrSize = list.size();

// String 배열일 경우
String[] arr1 = list.toArray(new String[arrSize]);

// int 배열일 경우
int[] arr2 = new int[arrSize];
for(int i=0; i<arrSize; i++) {
	arr2[i] = Integer.parseInt(list.get(i));
}

int[] arr3 = list.stream().mapToInt(i -> i).toArray();

int[] arr4 = list.stream().mapToInt(Integer::intValue).toArray();

반복문으로 값을 넣는 방법이 보통 정석이 되는데, 나는 stream을 배우고 나서부터 stream으로 변경한 뒤 mapToInt 메소드를 통해 정수 배열에 넣어 주는 방법을 사용하고 있다. 반복문 사용하면 로직이 너무 길어진다...

profile
내 인생 그려 보기

0개의 댓글