loading
본문 바로가기
Knowledge/자료구조

[ Linear Data Structure ] 배열 ( Array )

by NeuLyeo 2023. 12. 1.

[ Linear Data Structure ] 배열 ( Array )

 

 

 

 

📚 Table of Contents

     

     

     

     

    배열 ( Array )

    배열 ( Array )동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하는 방법이다.

     

    예를 들어 배열이 int 타입인 경우 정수 요소만 저장할 수 있고 그 외 타른 타입의 요소는 저장할 수 없다.

     

    배열을 구성하는 각각의 값을 요소 ( element )라고 하며,

     

    배열의 위치를 가르키는 숫자는 인덱스 ( index )라고 한다.

     

     

     

     

    배열 예시

    // 배열 선언
    // type[] name = new type[size]
    int[] arr = new int[5];
    
    // 선언 + 초기화
    int[] arr1 = {1, 2, 3, 4, 5};
    
    //elements : 1, 2, 3 ,4 ,5
    //index :    0, 1, 2, 3 ,4 
    //size : 5
    
    
    // 2차원 배열
    int[][] arr2 = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}}

     

    • 연속된 메모리 공간에 데이터들이 순차적으로 저장되어 있다.

    • 인덱스는 0부터 시작한다.
    • 각 요소는 인덱스를 통해서 다룰 수 있다.

     

     

     

     

    배열 특징

    • 많은 수의 데이터를 다룰 때 사용하는 자료 구조

    • 각 데이터를 인덱스와 1 : 1 대응하도록 구성

    • 데이터가 메모리 상에 연속적으로 저장

    • 크기가 고정적이다. 공간이 낭비되거나 데이터의 재배치가 필요할 수 있다.

    • 메모리는 배열이 선언될 때 (컴파일할 때) Stack영역에 할당한다.

     

     

     

    배열의 장점

    • 인덱스를 이용하여 데이터에 빠르게 접근 가능 하다.

    • 간단하고 사용하기 쉽다.

     

     

     

    배열의 단점

    • 데이터의 추가/삭제가 번거롭다
      • 미리 최대 길이를 정해서 생성해야 한다.
      • 가변 길이 배열은 배열의 크기를 변경할 때마다 새로운 배열을 생성한다.
      • 데이터 삭제 시, 크기는 고정되어 있기 때문에, 빈 공간을 유지한다.

     

     

     

     

    배열의 시간 복잡도

    Operation Average Case Worst Case
    read O(1) O(1)
    search O(n) O(n)
    insert O(n) O(n)
    delete O(n) O(n)

     

     

     

     

    배열을 사용하는 경우

    • 순차적인 데이터를 저장하며 값보다는 순서가 중요할 때

    • 다차원 데이터를 다룰 때

    • 어떤 특정 요소를 빠르게 읽어야 할 때

    • 데이터 사이즈가 자주 바뀌지 않으면서 요소가 자주 추가되거나 삭제되지 않을 때

     

     

     

     

     

    Java _ 배열 사용 방법

    배열 선언

    // size 지정
    int[] num = new int[5]

     

     

     

     

    배열 값 할당

    num[0] = 1;
    num[1] = 2;
    num[2] = 3;
    num[3] = 4;
    num[4] = 5;

     

     

     

     

    배열 특정 요소 확인 및 수정

    배열의 index = 2인 값을 수정 및 확인하는 예시

     

    num[2] = 10
    System.out.print(num[2]); // 10

     

     

     

     

    배열 크기 확인

    System.out.print(num.length); // 5

     

     

     

     

    배열 반복문

    for (int i = 0; i < num.length; i++){
        System.out.println(num[i]);
    }
    
    for (int el : num) {
        System.out.println("el : " + el);
    }

     

     

     

     

    2차원 배열

    System.out.println("== 2차원 배열 ==");  
        int[][] arr2 = {{1, 2, 3}, {4, 5, 6}};  
        System.out.println(arr2[0][1]); // 2 
    
        // 2차원 배열 출력  
        for(int[] row: arr2) {  
            for(int item: row) {  
                System.out.println("item = " + item);  
            }  
         }   

     

     

     

     

     

    Array List

    배열 ( Array )정적인 크기를 가지므로 크기를 변경할 수 없다.

     

    만약 크기를 동적으로 변경해야 하면 Array List와 같은 동적 배열을 사용할 수 있다.

     

     

     

     

    Array List의 특징

    1. 동적 크기 조정 : 초기화 할 때 크기를 지정할 필요가 없다.

    2. 참조 타입 ( reference type )만 원소로 저장할 수 있다.

    3. 데이터 중복이 가능하며, null값도 허용한다.

    4. 요소 추가와 삭제 : 요소를 추가 및 삭제 메서드를 제공한다.
      • add() : 리스트의 끝에 요소 추가 또는 특정 인덱스에 요소를 삽입한다.
      • remove() : 특정 인덱스나, 특정 값에 해당하는 요소를 삭제한다.

    5. 자료를 대량으로 추가 및 삭제 시 내부 처리 작업이 늘어나 성능이 떨어진다.

     

     

     

     

    Array List 주요 메서드

    • .add((index), val): 순서대로 리스트를 추가, 배열 사이즈 초과 시 초기 설정된 사이즈만큼 자동으로 사이즈가 증가함, 인덱스를 추가로 지정해 주면 해당 인덱스에 값을 삽입

    • .get(index): 해당 인덱스의 값 반환

    • .set(index, val): 인덱스로 값 변경

    • .indexOf(val): 값을 제공하면 해당 값의 첫 번째 인덱스를 반환

    • .lastindexOf(val): 해당 값의 마지막 인덱스 반환

    • .remove(index or val): 해당 인덱스의 값 or 해당 값 중 첫 번째 값 삭제

    • .contains(val): 해당 값이 배열에 있는지 검색해서 true / false 반환

    • .containsAll(val1, val2...): argument로 제공한 컬렉션의 모든 값이 포함되어 있는지 여부를 true / false로 반환

    • .toArray(): ArrayList 타입의 인스턴스를 일반 배열 타입으로 반환, 저장할 배열 타입에 맞춰 자동 형변환, 배열 크기 또한 자동으로 맞춰서 바꿔줌

    • .clear(): 값 모두 삭제

    • .isEmpty(): 비었으면 true, 하나라도 값이 있으면 false 반환

    • .addAll(arr2): 두 컬렉션을 합침

    • .retainAll(arr2): argument로 제공한 컬렉션 내에 들어있는 값을 제외하고 모두 지워줌

    • .removeAll(arr2): argument로 제공한 컬렉션 내에 들어있는 값과 일치하는 값을 모두 지워줌, retainAll() 메서드와 반대

    • .size(): 요소 개수 반환

     

     

     

     

     

    Java _ ArrayList 사용 방법

    Array List 생성

    ArrayList list = new ArrayList(Arrays.asList(1, 2, 3));  
    System.out.println("list = " + list); // list = [1, 2, 3]

     

     

     

     

    Array List 원소 추가

    list.add(4);  
    list.add(5);  
    System.out.println("list = " + list); // list = [1, 2, 3, 4, 5]

     

     

     

     

    Array List 원소 제거

    // 원소 제거 (인덱스)
    list.remove(2);  
    System.out.println("list = " + list); // list1 = [1, 2, 4, 5]
    
    // 원소 제거 (값)  
    list.remove(Integer.valueOf(2));  
    System.out.println("list = " + list); // list = [1, 4, 5]

     

     

     

     

    Array List 2차원 배열

    ArrayList list2d = new ArrayList();  
    ArrayList list1d1 = new ArrayList(Arrays.asList(1, 2, 3));  
    ArrayList list1d2 = new ArrayList(Arrays.asList(4, 5, 6));  
    
    list2d.add(list1d1);  
    list2d.add(list1d2);  
    
    System.out.println("list1d1 = " + list1d1); // list1d1 = [1, 2, 3]  
    System.out.println("list1d2 = " + list1d2); // list1d2 = [4, 5, 6]
    System.out.println("list2d = " + list2d); // list2d = [[1, 2, 3], [4, 5, 6]]

     

     

     

     

     

    reference

     

    [자료구조] 배열(Array) 자료구조 알아보기 & Java 예제 코드(+ ArrayList)

    자료구조 중 배열(Array)에 대해 정리해보자. 배열(Array)이란? 배열(Array)은 자료구조 중 하나로, 동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하는 방법이다. 배열은 인덱스(index)를

    hoehen-flug.tistory.com

     

    [Java] ArrayList 사용법과 주요 메소드

    - ArrayList (java.util.arrayList) 생성자 new ArrayList() : 기본 크기가 10인 배열 생성 new ArrayList(기본크기) : 기본 크기를 지정 (배열이 다 차면 기본크기만큼 사이즈가 증가함) new ArrayList() : 배열 값의 타입

    da2uns2.tistory.com

     

    [자료구조] 배열 (Array)

    목차 [자료구조] 배열 (Array) 배열은 연속된 메모리 공간에 순차적으로 저장된 데이터 모음입니다 대부분에 프로그램 언어에서 동일 타입의 데이터를 저장합니다. 예를 들어 배열이 "int"타입인

    yoongrammer.tistory.com