Array

2024. 2. 16. 09:38·CS/Data Structure

같은 타입의 변수들로 이루어져 있으며, 순서대로 나열한 선형 자료구조

 

  • 각 원소는 배열에서 고유한 인덱스를 가진다.
  • 인덱스를 사용하여 특정 위치의 원소에 접근할 수 있다.
    O(1)의 시간복잡도를 가진다.
  • 고정된 크기(정적)를 가지며, 각 원소에 메모리상 연속적으로 저장된다.

 

[Code]

정수형 배열 선언과 초기화
int[] numbers = new int[5]; // 크기가 5인 정수형 배열 생성

// 문자열 배열 선언과 초기화
String[] names = new String[3]; // 크기가 3인 문자열 배열 생성


public class Main {
    public static void main(String[] args) {
        // 정수형 배열 선언과 초기화
        int[] numbers = new int[5];

        // 배열의 각 요소에 값 할당
        numbers[0] = 10;
        numbers[1] = 20;
        numbers[2] = 30;
        numbers[3] = 40;
        numbers[4] = 50;

        // 배열의 각 요소 출력
        System.out.println("배열 요소 출력:");
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("numbers[" + i + "] = " + numbers[i]);
        }
    }
}

배열 요소 출력:
numbers[0] = 10
numbers[1] = 20
numbers[2] = 30
numbers[3] = 40
numbers[4] = 50

장점

  •  인덱스를 사용하여 특정 위치의 원소에 빠르게 접근 가능하다.
  •  원소들이 연속적으로 메모리에 저장되기 때문에 캐시 지역성을 활용할 수 있다.

※ 기억 장치 내의 정보를 균일하게 Access하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성

단점

  •  배열의 크기를 선언할 때 고정되며, 크기를 동적으로 조절할 수 없다.
  •  크기를 변경하려면 새로운 배열을 만들어 데이터를 복사해야 한다.
  •  크기가 고정되어 있어 배열을 선언할 때 최대 크기로 메모리를 할당받게 되는데,
    만약 배열의 실제 크기가 최대 크기보다 작다면 메모리가 낭비된다.
  •  삽입, 삭제가 발생할 경우, 해당 위치 이후의 모든 원소를 이동시켜야한다.
    이때 O(n)의 시간복잡도를 가진다.

[삽입, 삭제 Code]

public static void main(String[] args) {
    int[] arr = new int[5];
    arr[0] = 10;
    arr[1] = 20;
    arr[2] = 30;

    System.out.println("배열 초기 상태:");
    for (int i : arr) {
        System.out.print(i + " ");
    }
    System.out.println();

    insertElement(arr, 25);
    System.out.println("요소 삽입 후:");
    for (int i : arr) {
        System.out.print(i + " ");
    }
    System.out.println();

    deleteElement(arr, 1);
    System.out.println("요소 삭제 후:");
    for (int i : arr) {
        System.out.print(i + " ");
    }
    System.out.println();
}

// 요소 삽입을 항상 첫번째 인덱스로 하는 경우
static void insertElement(int[] arr, int element) {
    // 삽입 위치 이후의 요소들을 오른쪽으로 이동
    for (int i = arr.length - 1; i > 0; i--) {
        arr[i] = arr[i - 1];
    }

    arr[0] = element;
}

static void deleteElement(int[] arr, int index) {
    // 배열의 크기보다 작거나 같은 유효한 인덱스에만 삭제 가능
    if (index < 0 || index >= arr.length) {
        System.out.println("유효하지 않은 인덱스입니다.");
        return;
    }

	// 삭제 위치 이후의 요소들을 왼쪽으로 이동
    for (int i = index; i < arr.length - 1; i++) {
        arr[i] = arr[i + 1];
    }

	// 마지막 요소는 삭제됨으로 초기화
    arr[arr.length - 1] = 0;
}
저작자표시

'CS > Data Structure' 카테고리의 다른 글

복잡도  (0) 2024.03.17
Heap  (0) 2024.03.15
Stack & Queue  (1) 2024.03.14
LinkedList  (0) 2024.02.20
'CS/Data Structure' 카테고리의 다른 글
  • 복잡도
  • Heap
  • Stack & Queue
  • LinkedList
tjdgus
tjdgus
  • tjdgus
    Do It...
    tjdgus
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Language
        • Java
      • CS
        • Data Structure
        • OS
        • Algorithm
        • Network
      • 오류 모음집
      • ETC
      • 함수형 프로그래밍
      • JPA
      • Toy
      • 데이터베이스
      • Spring
      • 코딩테스트
        • 99클럽 4기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    개발자취업
    TiL
    오블완
    코딩테스트준비
    99클럽
    항해99
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
tjdgus
Array
상단으로

티스토리툴바