27. List 컬렉션

Lee kyu min·2024년 2월 14일

Java study

목록 보기
27/41

List

  • 성형 자료 구조 형태로 요소 저장
  • 요소 저장시 저장 순서로 인덱스 부여, 인덱스로 요소 검색 혹은 삭제 가능
  • 요소 중복 저장 가능, null 저장 가능
  • 자식 클래스로 ArrayList, LinkedList, Vector가 있다.

형식

List<자료형> 객체명 = new 자식클래스명<>();

1. ArrayList

  • 배열 기반 데이터 구조 구현, 배열 크기 가변적
  • ArrayList를 생성할 때 지정한 크기보다 더 많은 객체를 저장하면 크기가 자동적으로 늘어나지만 이 과정에서 처리 시간이 많이 소요된다.
    따라서, 저장할 요소의 개수를 고려해서 실제 저장할 개수보다 약간 여유있는 크기로 하는 것이 좋다.

1) 값 추가

add(value);		//값 추가
add(index, value);	//해당 인덱스 번째 값 추가 
  • 인덱스 중간에 값 추가시 그 이후 값들은 인덱스가 1씩 늘어난다

2) 수정

set(index, value);	//해당 인덱스 번째 값 수정 

3) 삭제

remove(value);		//ArrayList 내 값 삭제
remove(index);		//ArrayList 내 해당 인덱스 번째 리스트 값 삭제
clear();		//ArrayList 내 모든 값 삭제
  • ArrayList 내 값 삭제 시 뒷 번호 데이터가 전부 앞으로 한칸 씩 이동
    (빈번한 삭제가 있는 경우 속도가 저하될 수 있다.)

4) ArrayList 크기 구하기

size();		//해당 ArrayList 크기 반환

5) 값 반한

get(index);		//해당 인덱스 번째 값 반환

6) 값 검색

contains(value);	// 해당 값이 있으면 true, 없으면 false 반환
indexOf(value);		// 해당 값이 있으면 인덱스 반환, 없으면 -1 반환

7) 정렬

Collections.sort(객체명);

2. LinkedList

  • ArrayList와 LinkedList는 사용법이 같다. 다만 저장되는 메모리 구조가 다르다
  • 데이터와 포인터를 가진 요소가 선형 순서로 저장
    (데이터를 담고 있는 요소가 연결, 요소의 포인터가 다음 요소를 연결)

3. ArrayList, LinkedList 비교

  • 다루는 데이터 개수가 변하지 않으면 ArrayList가, 데이터 개수의 변경이 잦다면 LinkedList를 사용하는 것이 나은 선택이 될 수 있다.

1) 데이터 읽기

ArrayList > LinkedList

2) 데이터 추가/삭제

ArrayList < LinkedList

4. Arrays

  • 배열을 다루는데 유용한 메서드 정의

1). 배열 복사(copyOf(), copyOfRange())

Arrays.copyOf(배열명, 복사할 배열 크기);	//배열 전체 복사
Arrays.copyOfRAnge(배열명, 시작 위치, 배열 크기); //배열 일부 복사

2). 배열 초기화(fill(), setAll())

Arrays.fill(배열명, value);	//value로 배열 전체 값 초기화
Arrays.setAll(배열명, i -> 함수식);	//해당 함수식 적용된 배열로 초기화

3). 배열 정렬sort(), 검색binarySearch()

Arrays.sort(배열명);	//배열 정렬
Arrays.binarySearch(배열명, 찾는 value);	//정렬된 배열만 사용 가능, 이진 검색으로 속도가 빠름

4). 배열 비교equals(), 출력toString()

Arrays.equals(배열1, 배열2);	//두 배열의 모든 저장 요소가 같으면 true, 다르면 false
Arrays.toString(배열명);	//배열 모든 요소 출력(일차원 배열만 사용 가능)

5). 배열을 List로 변환asList(Object... a)

List 배열명 = Arrays.asList(값1, 값2, ...)	//list = {값1, 값2, ...}
  • 단, asList()로 만든 배열은 크기 변경 불가(저장된 내용은 변경 가능)
List 배열명 = new ArrayList(Arrays.asList(값1, 값2, ...));	//크기 변경 가능

0개의 댓글