CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL
공부 STUDY/JAVA

[JAVA] 자료구조 - List | ArrayList, LinkedList 차이는 무엇일까?

[JAVA] 자료구조 - List | ArrayList, LinkedList 차이는 무엇일까?
공부 STUDY/JAVA

[JAVA] 자료구조 - List | ArrayList, LinkedList 차이는 무엇일까?

2023. 1. 15. 14:36

List는 자바의 자료형 중 하나이다. 배열과 비슷하지만 명확한 차이점이 있다.

 

1. 크기를 자유롭게 설정 가능

- 배열은 처음 크기를 설정하고 나서부터는 크기 설정이 불가능하지만 리스트는 삽입과 삭제로 원하는대로 크기를 변경할 수 있다.

 

2. 배열은 직접 액세스(Direct access), 순차 액세스(Sequential Access) 모두 가능 |  List는 순차 액세스만 가능

 

직접 액세스(Direct Access)는 배열의 값으로 바로 접근하는 것을 말하고 

순차 액세스는(Sequential Access)는 처음부터 시작해 배열의 특정 값까지 접근하는 것을 말한다.

 

당연히 직접 액세스가 훨씬 더 빠르게 접근할 수 있기 때문에 배열 안에 값을 넣거나 가져올 때는 Array가 List보다 더 빠르다.

 

정리해보면

 

List는 삽입, 삭제를 통해 크기를 자유롭게 변경 가능하고 순차 액세스만 가능하기 때문에 배열보다는 좀 느리다.

 

다만 배열은 크기를 변경할 수 없기 때문에 예기치 못한 상황에 대처하기 매우 힘든데

List는 동적으로 크기를 변경할 수 있기 때문에 그 점에 있어서는 배열보다 훨씬 유리하다.

 

다음으로 List의 메소드들을 알아보자.

 

List 선언 (ArrayList, LinkedList)

ArrayList<데이터형> 리스트명 = new ArrayList<데이터형>();

 

ArrayList와 LinkedList 두 유형으로 선언이 가능한데

ArrayList는 대량의 데이터 검색에 LinkedList는 대량의 데이터 삽입, 삭제에 유리하다

 

ArrayList는 값을 가져오는 get() 메소드를 수행 시 LinekdList보다 훨씬 빠르며

LinkedList는 값을 추가하거나 삭제하는 add(), remove() 메소드 수행 시 ArrayList보다 훨씬 빠르다.

 

이유를 알아보면,

 

ArrayList는 배열과 같은 구조기 때문에 특정 값을 가져올 때에는 배열을 쭉 지나가면 되므로 매우 빠르다.

 

반면 값을 추가하거나 삭제할 때에는 특정 값을 지우고 뒤의 값을 모두 한칸씩 땡겨오거나

특정 값을 추가하고 뒤의 값을 모두 한칸씩 미는 식으로 진행하기 때문에 대량의 추가/삭제에 있어서 매우 느리다

 

LinkedList는 내 전 배열 인덱스의 값과 다음 배열 인덱스의 값만 알고있기 때문에

추가 삭제시에는 ArrayList보다 훨씬 빠르다.

다만 이렇게 하나하나 찾아가는 구조기 때문에 대량검색 시에는 ArrayList보다 훨씬 느리다

 

결론으로 돌아가보자면

ArrayList는 검색이 LinkedList보다 훨씬 빠르므로 대량의 데이터를 넣어놓고 검색할 때 주로 사용한다.

LinkedList는 삽입, 삭제가 ArrayList보다 훨씬 빠르므로 대량의 데이터를 삽입, 삭제할 때 주로 사용한다.

 

List 추가

리스트명.add("값")

 

List 삭제 

리스트명.remove("값");

리스트명.remove(인덱스)

 

List 값 변경

리스트명.set(인덱스, "바꿀값");

 

List 크기 확인

리스트명.size();

 

List에 특정 값 들었는지 확인

리스트명.contains("값");

 

List가 비었는지 확인

리스트명.isEmpty();

 

List 안에 List, Set, 배열 전체 더하기

리스트명.addAll(다른컬렉션명(List, Set..));

- 배열도 합쳐줄 수 있음

리스트명.addAll(Arrays.asList(배열명)); -- 배열의 경우

 

코드를 통해 확인해보고 싶다면

아래 코드블록을 참조해주면 된다

 

	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>(); // List 선언(ArrayList)
		LinkedList<String> list2 = new LinkedList<String>(); // List 선언(LinkedList)
		
		list2.add("E");
		list.add("A");
		list.add("B");
		list.add("C"); // List 추가
		list.add(0, "D"); // 0번째에 D값을 추가(동일한 값이 있을 경우 밀어냄)
		System.out.println("List 값 확인 : " + list);
		System.out.println("List 인덱스 값 확인 : " + list.get(0));
		
		list.remove(2); // List 삭제(인덱스)
		list.remove("B"); // List 삭제(값으로)
		
		list.set(0, "Z"); // List 값 변경 (인덱스, "변경할 값")
		
		System.out.println("List 크기 확인 : " + list.size());
		
		System.out.println("List 안에 특정 값 들었는지 확인 : " + list.contains("B"));
		
		System.out.println("List 안에 아무것도 들지 않았는지 확인 : " + list.isEmpty());
		
		list.addAll(list2); // 리스트에 다른 리스트 더하기
		String[] arr = {"ARRAY"};
		list.addAll(Arrays.asList(arr)); // 배열을 리스트로 더하기
		System.out.println("List 안에 다른 리스트 더하기 : " + list);
	}

'공부 STUDY > JAVA' 카테고리의 다른 글

[JAVA] 자료구조 - Map  (0) 2023.01.15
[JAVA] 자료구조 - Set | Hashset  (0) 2023.01.15
[JAVA] 제네릭 Generic  (0) 2023.01.15
[JAVA] java.util패키지 | 컬렉션 프레임워크(Collection Framework)  (0) 2023.01.15
[JAVA] StringBufffer, StringBuilder 사용법 & 차이점이 뭘까?  (0) 2023.01.15
    '공부 STUDY/JAVA' 카테고리의 다른 글
    • [JAVA] 자료구조 - Map
    • [JAVA] 자료구조 - Set | Hashset
    • [JAVA] 제네릭 Generic
    • [JAVA] java.util패키지 | 컬렉션 프레임워크(Collection Framework)
    CHANGEL
    CHANGEL
    NOT GIVING UP | SOLID BASICS

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.