Array, List

beomgolae·2023년 9월 22일

10발의 점수를 구하는 것이 10개의 변수를 선언하는 것이 아닌
try1 + try2 + ... + try10

효율적인 방법이 아니다.

int[] tries = new int[]{10,9,7,6,6,9,...,10};

// 합산하고 싶을 때
int sum = 0;
for (int t : tries){
	sum += t;
}

Array

같은 타입의 데이터들을 저장하는 자료구조 입니다.

  • 연속된 메모리 공간에 데이터들을 저장
  • 데이터들은 각각의 이름은 없지만 인덱스로 접근 가능
int[][] twoD = {{1,2}, {3,4}};

// 객체의 경우, 객체의 주소값이 연속적으로 저장되는 것이고
// 객체는 연속적으로 저장되는게 아닙니다.

String[] names = {"easy", "code", "yeah"};
//지만 사실 {ref-easy, ref-code, ref-yeah}가 담겨 있습ㄴ디ㅏ.

연속된 메모리 공간에 데이터들을 저장하기 때문에 cpu cache를 통해 같은 배열에 있는 다른 데이터를 접근하는 시간을 단축할 수 있다.

CPU Cache - VVIP 저장소

캐시 메모리 (CPU cache Memory)

대표적인 캐시 메모리 저장 규칙
1. 최근에 접근된 데이터 (시간적 지역성)
2. 최근에 접근된 데이터의 주변 데이터 (공간적 지역성)

시간적, 공간적 지역성을 기반으로 가까운 미래에 접근될 확률이 높은 데이터를 작지만 빠른 캐시 메모리에 미리 보관해 전체적인 시스템의 성능을 높인다.

Dynamic array(동적 배열)

크기가 변할 수 있는 array

  • 데이터를 더하거나 빼는 것이 가능한 자료 구조
  • resizable array, array list 등등으로 불림

위에는 빈 공간에 17을 넣고싶으면 넣으면 된다.
5를 추가적으로 넣고싶다면
전체 크기가 2배인 배열을 새로 만들고
복사를 해서 5를 넣는다.

Associate array(연관 배열)

  • key-value pair들을 저장하는 ADT
  • 같은 key를 가진 pair는 최대 한 개만 존재
  • map, dictionary라고 불리기도 한다.

List

  • 값 들을 저장하는 추상 자료형
  • 순서가 있음
  • 중복을 허용


객관식 문제의 정답

set이나 map을 사용하는게 더 적절한 상황이 아니라면, 거의 대부분 list를 사용한다고 봐도 무리가 없습니다.

List 구현체

ArrayList

배열을 사용해 List를 구현

Linked List







index로 접근 x heade부터 시작해서 차근차근 접근해야한다.

tail이 없으면 head부터 시작해야함 그래서 tail 꼭 둔다


확장팩


head와 tail이 연결되는 형태 (head or tail 하나만 관리하면 되니까 쉽다.)

  1. 양방향

  2. 1+2 합침

Array List vs Linked list

https://velog.io/@chuu1019/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EB%B0%B0%EC%97%B4%EA%B3%BC-%EC%97%B0%EA%B2%B0%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%B9%84%EA%B5%90

0개의 댓글