배열

김하영·2023년 3월 22일
0

선형자료구조

목록 보기
1/5

배열(Array)의 특징

  • 각 데이터를 인덱스와 1:1로 대응하도록 구성되어 있다.
  • 데이터가 메모리에 연속적으로 저장된다.

배열의 등장 배경

배열은 많은 수의 데이터를 다루기 위해 등장한 자료구조이다.

배열의 장점

  • 인덱스를 이용해 데이터에 빠르게 접근할 수 있다.

배열의 단점

  • 데이터 추가/삭제가 번거롭다.
  • 미리 최대 길이를 정해서 생성해야한다.
    • 배열은 매모리에 연속적으로 저장되므로 연속적인 저장 공간을 마련해야하기 때문이다.
  • 가변 길이 배열은 배열의 크기를 변경할 때마다 새로운 배열을 생성한다.
    • 새로운 데이터를 추가할 때 메모리를 추가할 데이터 길이만큼 더 길게 생성하여 기존 배열을 복사한다.
  • 데이터를 삭제할떄, 인덱스를 유지하기 위해 빈공간을 유지한다.
  • ⇒ ArrayList를 사용하면 배열에서 추가/삭제가 편리해진다!! 배열의 기능을 편리하게 사용하도록 자바에서 제공하는 Collection 프레임워크

💡
배열은 데이터로 접근이 빠르므로 자료의 변경이 거의 없고 참조만 하는 정적 데이터일때 많이 사용하는 자료구조다!!!
cf) 삽입/삭제가 빈번한 데이터라면 링크드리스트를 사용한다.

ArrayList 메소드

선언

import java.util.ArrayList;
ArrayList<Integer> list = new ArrayList<>();

메소드

list.add(val) : 맨 뒤에 val추가
list.add(idx, val) : idx위치에 val추가
list.set(idx, val) : idx위치 val로 값 변경
list.remove(idx) : idx 위치 삭제
list.get(idx) : idx위치 값 반환
list.size() : list의 크기 반환 

배열의 시간 복잡도

동작시간복잡도
접근O(1)O(1)
탐색O(n)O(n)
추가 / 제거O(n)O(n)

💡
문제:
int arr를 asList를 사용하여 ArrayList로 바꿔주고 스트림연산을 하기 위해 스트림으로 바꿔주었다. 이때 바로 list.stream(arr)바꾸면 stream연산이 되지 않고 에러가 났다.
원인:
arr를 스트림으로 만들때, arr의 자료형과 stream의 자료형이 맞지 않았기 때문이다.
해결:
그래서 stream이 아니라 IntStream.of(arr)를 사용하여 IntStream으로 바꿔주니 스트림에서 중계연산과 최종연산이 가능했다!!!
느낀점:
형에 따라 스트림도 자료형을 맞춰주어야 한다는 사실을 깨닫게 되었다. 자바는 생각보다 타입케스팅이나 자료형에 민감한 언어라는 생각이 들었다. 이게 다 안정성때문인것 같다고 추측해본다!!
그냥 배열 int[] arr가 있을때 sort하는 법: Arrays.sort(arr);

profile
백엔드 개발자로 일하고 싶어요 제발

0개의 댓글