[Java] 컬렉션 프레임워크(3) - List 인터페이스

sobam·2022년 9월 27일
0

자바

목록 보기
6/18
post-thumbnail

📔 학습한 내용을 정리하기 위해 작성하는 게시글입니다.

🔑List<E> 인터페이스

List<제네릭 타입 지정> 참조 변수 = Arrays.asList(제네릭 타입 저장 데이터);

특징


  • 데이터의 저장 순서가 유지되고(index 식별자로 순서를 가짐), 동일 데이터의 중복 저장 허용하는 자료구조
  • 배열과 가장 비슷한 구조를 지닌 자료구조. 배열과 리스트의 가장 큰 차이점은 배열은 저장 공간의 크기가 고정적이며, 리스트는 동적으로 변화할 수 있다는 점
  • 동일 타입 수집, 메모리 동적 할당, 데이터 추가/변경/삭제 메서드
  • List<E> 인터페이스를 구현한 대표적인 클래스로는 ArrayList<E>, Vector<E>, LinkedList<E>가 있음


List<E> 인터페이스에서 사용되는 주요 메서드



구분리턴 타입메서드명기능
데이터추가booleanadd(E element)매개변수로 입력된 원소를 리스트 마지막에 추가
voidadd(int index, E element)index 위치에 입력된 원소 추가
booleanaddAll(Collection<? Extends E> c)매개변수로 입력된 컬렉션 전체를 마지막에 추가
booleanaddAll(int index, Collection<? Extends E> c)index 위치에 입력된 컬렉션 전체를 추가
데이터 변경Eset(int index, E element)index위치의 원솟값을 입력된 원소로 변경
데이터 삭제Eremove(int index)index 위치의 원솟값 삭제
booleanremove(Objec o)원소 중 매개변수 입력과 동일한 객체 삭제
voidclear()전체 원소 삭제
리스트 데이터 정보 추출Eget(int index)index 위치의 원솟값을 꺼내 리턴
intsize()리스트 객체 내에 포함된 원소의 개수
booleanisEmpty()리스트의 원소가 하나도 없는지 여부를 리턴
리스트 배열 반환Object[]toArray()리스트를 Object 배열로 반환
T[]toArray(T[]t)입력매개변수로 전달한 타입의 배열로 반환



1. ArrayList<E>


  • 배열을 이용하여 객체를 저장하는 배열 기반 자료구조
  • List<E> 인터페이스를 구현한 구현 클래스
  • 배열처럼 수집(collect)한 원소(element)를 인덱스(index)로 관리, 저장 용량(capacity)을 동적 관리

ArrayList 예제

import java.util.ArrayList;
import java.util.List;

public class Ex01_ArrayList {
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		
		//객체 저장 : 순서 있음. 중복 허용
		list.add("orange");
		list.add("apple");
		list.add("apple");
		list.add("banana");
		
		//객체 참조
		for(int i = 0; i < list.size(); i++)
			System.out.print(list.get(i) + '\t');
		System.out.println();
		
		//첫 번째 객체 삭제
		list.remove(0);
		
		//삭제 후 객체 참조
		for(int i = 0; i < list.size(); i++)
			System.out.print(list.get(i) + '\t');
		System.out.println();
	}
}

ArrayList 예제 출력

orange	apple	apple	banana	
apple	apple	banana	

배열과 ArrayList의 차이점

구분배열ArrayList
저장 데이터 종류배열 선언 시 지정한 데이터만 저장 가능(Object 타입은 예외)ArrayList
저장 데이터 개수선언 시 생성한 요소 개수만 저장 가능저장 개수 제한 없음
데이터 접근 방법인덱스로 접근인덱스로 접근


2. LinkedList<E>


  • 연결 기반 자료구조
  • List<E> 인터페이스를 구현한 구현 클래스
  • 저장용량을 매개변수로 갖는 생성자가 없기 때문에 객체를 생성할 때 저장 용량을 지정할 수 없음
  • 내부적으로 데이터를 저장하는 방식만 다를 뿐 메서드의 종류와 활용 방법은 ArryaList<E>와 동일

LinkedList 예제

import java.util.LinkedList;
import java.util.List;

public class Ex02_LinkedList {
	public static void main(String[] args) {
		List<String> list = new LinkedList<>();
		
		//객체 저장 : 순서 있음, 중복 허용
		list.add("orange");
		list.add("apple");
		list.add("apple");
		list.add("banana");
		
		//객체 참조
		for(int i = 0; i < list.size(); i++)
			System.out.print(list.get(i) + '\t');
		System.out.println();
		
		//첫 번재 객체 삭제
		list.remove(0);
		
		//삭제 후 객체 참조
		for(int i = 0; i < list.size(); i++)
			System.out.print(list.get(i) + '\t');
		System.out.println();
	}
}

LinkedList 예제 출력

orange	apple	apple	banana	
apple	apple	banana	


3. ArrayList vs. LinkedList


컬렉션읽기(접근 시간)추가/삭제비고
ArrayList<E>빠름 (index로 탐색)느림순차적인 추가, 삭제는 더 빠름. 비효율적인 메모리 사용
LinkedList<E>느림빠름데이터가 많을수록 접근성이 떨어짐(저장된 객체의 참조 과정이 배열에 비해 복잡함), 저장 공간을 늘리는 과정이 간단함(링크를 끊거나 연결만 하면 됨)

다루는 데이터의 개수가 변하지 않는 경우엔 ArrayList<E>, 데이터 개수의 변경이 잦다면 LinkedList<E>를 사용하는 것이 좋다.



4. Vecotr<E>


  • Vector<E>의 주요 메서드는 동기화 메서드로 구현되어 있음 → 멀티 쓰레드에 적합하도록 설계됨
  • 싱글 쓰레드에서는 무겁고 많은 리소스를 차지하는 Vector<E>대신 ArrayList<E>를 쓰는 것이 효율적임



🔔 Referance

<이재환의 자바 프로그래밍 입문>
<Do it! 자바 완전 정복>
<초보자를 위한 Java Programming>
https://docs.oracle.com/javase/8/docs/api/java/util/List.html
https://developer-yeony.tistory.com/117

0개의 댓글

관련 채용 정보