울음참고 개발공부
728x90

 

 

 

ArrayList와 LinkedList의 차이점

 

 

1. 내부 데이터 구조

 

  • ArrayList
    • 내부적으로 배열(Array)을 사용하여 요소를 지정
    • 배열의 크기를 동적으로 조정할 수 있으며, 인덱스를 기반으로 빠른 임의 접근이 가능함
  • LinkedList
    • 내부적으로 연결 리스트를 사용하여 요소를 저장
    • 각 요소는 자신의 데이터와 다음 요소를 가리키는 링크로 구성
    • 임의 접근에는 비효율적이지만, 요소의 삽입과 삭제가 빠르게 이루어짐

 

 

2. 데이터 접근

 

  • ArrayList
    • 인덱스를 사용하여 요소에 접근할 수 있으므로 임의 접근이 빠름
    • 인덱스 기반의조회 및 변경이 빠르게 이루어짐
  • LinkedList
    • 연결 리스트의 특성상 요소를 순차적으로 탐색해야 하므로, 임의 접근이 느림
    • 요소의 삽입과 삭제는 포인터 조작만으로 이루어지므로 상대적으로 빠름

 

 

3.삽입 및 삭제

 

  • ArrayList
    • 요소의 삽입과 삭제가 발생할 때, 해당 위치의 요소들을 이동시켜야 하므로 비교적 느림
  • LinkedList
    • 요소의 삽입 삭제가 링크를 재조정하는 작업만으로 이루어지므로, ArrayList 에 비해 상대적으로 빠름

 

 

4. 메모리 사용

 

  • ArrayList
    • 요소를 연속적인 메모리 블록에 저장하므로, 메모리 사용이 효율적임
  • LinkedList
    • 각 요소는 독립적으로 메모리에 저장되고 링크로 연결되므로, 추자적인 메모리 오버헤드가 발생할 수 있음

 

요약
ArrayList는 임의 접근과 요소의 변경이 빈번한 경우에 유리하며,
LinkedList는 요소의 삽입과 삭제가 빈번한 경우에 유리함

 

 

 


 

 

Array 에서  List 로 전환하려면?

 

 

 

1. 변경 불가능한 리스트로 변환

 -> array 배열을 List 로 변환하고, 변환된 List를 list 변수에 할당

 

// 배열 생성
String[] array = {"Apple", "Banana", "Orange"};

// 배열을 List로 전환
List<String> list = Arrays.asList(array);

 

Array.asList() 메서드가 반환하는 List 는 고정 크기의 리스트이며, 원본 배열의 변경이 리스트에 반영된다

따라서 리스트에 원소를 추가하거나 삭제할 수 없다.

 

 

 

2. 변경 가능한 리스트로 변환

 -> ArrayList 의 생성자를 사용하여 Arrays.asList() 의 반환 값을 새로운 ArrayList 인스턴스로 복사

 

// 배열 생성
String[] array = {"Apple", "Banana", "Orange"};

// 배열을 List로 변환하여 변경 가능한 리스트로 복사
List<String> list = new ArrayList<>(Arrays.asList(array));

 

이렇게하면 변경 가능한 리스트가 생성되며, 원본 배열의 변경은 영향을 주지 않는다. 

 

 

 

 

 

 

 

 

 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!