본문 바로가기

Study for Backend/Data Structure

[Data Structure 기초] Array

 

 

Array(어레이)

- 동일한 타임의 연관 데이터를 메모리에 연속적으로 저장하여 하나의 변수에 묶어서 관리하기 위한 자료 구조, 선형 자료구조

- 처음 생성할 때 지정한 자료형만 넣을 수 있다

- 배열의 길이는 고정적이고 먼저 할당해줘야 한다. 따라서 메모리 사용에 효율적이다.

Stack 시간복잡도

접근, 탐색 : O(1)
추가
1. 추가하려는 데이터가 맨 뒤가 아니라면, 추가되는 데이터 위치 이후에 있는 모든 데이터들을 한 칸씩 미뤄야 하므로 O(n)의 시간복잡도를 가진다.
2. 추가하려는 데이터의 위치가 맨 뒤이고 배열에 공간이 남아있다면, O(1)의 시간복잡도를 가진다.
삭제
1. 삭제하려는 데이터의 위치가 맨 뒤가 아니라면, O(n)의 시간복잡도를 가진다.
2. 삭제하려는 데이터의 위치가 맨 뒤이고 배열에 공간이 남아있다면, O(1)의 시간복잡도를 가진다.

 

연산  
Arrays.copyOf() 배열복사
(*얕은 복사 : 복사하려는 배열의 주소값을 가져옴 / 깊은 복사 : 원래 배열을 가져와 새 배열로 덮어 씀)
Arrays.sort() 배열 정렬
Arrays.binarySearch() 배열 항목 검색. 정렬을 하지 않은 상태로 해당 메소드를 사용하거나, 없는 항목을 찾으면 음수값 리턴
fill() 배열 동일 항목 채우기
Arrays.equals() 배열 주소 비교
Arrays.deepEquals() 배열 값 비교

 

//어레이 사용예제
    //정적배열
    System.out.println("=== 1차원 배열 ===");
    int[] arr = {1, 2, 3, 4, 5};
    for(int item : arr){
        System.out.println("item = " + item);
    }

    arr[1] = 100;
    System.out.println("arr = " + Arrays.toString(arr));

    System.out.println("=== 2차원 배열 ===");
    int[][] arr2 = {{1, 2, 3},{4, 5, 6}};
    System.out.println(arr2[0][1]);

    for(int[] row : arr2){ //1
        for (int item : row){ //2
            System.out.println("item = " + item);
        }
    }

    //동적배열
    System.out.println("=== ArrayList ===");
    ArrayList list1 = new ArrayList(Arrays.asList(1,2,3));
    System.out.println("list1 = " + list1);
    list1.add(4);
    list1.add(5);
    System.out.println("list1 = " + list1);
    list1.remove(2);
    System.out.println("list1 = " + list1);
    list1.remove(Integer.valueOf(2));
    System.out.println("list1 = " + list1);

    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);
    System.out.println("list1d2 = " + list1d2);
    System.out.println("list2d = " + list2d);

 

장점

- 메모리 관리 간편
정적 배열은 크기가 고정되어 있으므로 메모리 관리가 간단하고 효율적이다.
- 인덱스를 통해 요소에 직접 접근할 수 있기 때문에 인덱스 접근의 성능이 상대적으로 우수하다.

단점

- 크기 변경 불가
크기가 고정 되는 것이 메모리 관리에 있어 장점이 될 수 있지만 오히려 단점이 될 수 도 있다.
정적 배열은 선언 시 크기가 고정되어 크기 변경이 불가능하다. 따라서 크기 변경이 필요한 경우 새로운 배열을 생성하고 이전 요소를 복사해야 한다.
- 정적 배열은 크기를 미리 정해야 하므로, 필요한 크기를 예측하기 어려운 경우에는 공간 낭비 또는 부족한 공간 문제가 발생할 수 있다.

 

 

관련link

https://hak0205.com/entry/%EA%B0%9C%EB%85%90-%EC%9E%90%EB%B0%94-%EB%B0%B0%EC%97%B4Array-%EB%AC%B8%EB%B2%95-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B3%B5%EC%82%AC

 

[ 개념 ] 자바 배열(Array) 문법 사용법 복사

1. 배열(Array)이란? 자바 배열(Array)은 동일한 유형의 데이터 타입을 저장할 수 있는 데이터 구조입니다. Java의 배열은 셀로 나누어진 연속적인 메모리 블록을 포함하는 객체이며 각 블록은 배열의

hak0205.com

 

https://velog.io/@sw_smj/Java-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B8%B0%EC%B4%88-%EB%AC%B8%EB%B2%95-1.-Array

 

[Java] 코딩테스트 기초 문법 - Array

Java의 Array란? 배열(Array) 하나의 변수에 여러 값을 저장하는 데에 쓰이는 정적 리스트(static list) 즉, 지정된 자료형(String, int, ···)의 집합을 담는 또 하나의 자료형 > 💡 Python의 List와 비교 > >

velog.io

https://velog.io/@sw_smj/Java-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B8%B0%EC%B4%88-%EB%AC%B8%EB%B2%95-1.-Array

 

[Java] 코딩테스트 기초 문법 - Array

Java의 Array란? 배열(Array) 하나의 변수에 여러 값을 저장하는 데에 쓰이는 정적 리스트(static list) 즉, 지정된 자료형(String, int, ···)의 집합을 담는 또 하나의 자료형 > 💡 Python의 List와 비교 > >

velog.io

 

https://dev-note-97.tistory.com/36

 

[Java] Java 배열 깊은 복사 & 얕은 복사 / Deep Copy & Shallow Copy / Java 객체 배열 복사

👀 깊은 복사 / 얕은 복사 👀 1.얕은 복사 : 복사한 배열이 원래 배열의 '주솟값'을 가져옴 2.깊은 복사 : 복사한 배열이 원래 배열을 '그대로' 가져옴 Java의 배열 복사에는 깊은 복사(Deep Copy)와 얕

dev-note-97.tistory.com

https://sirobako.co.kr/detail/90

 

자바 정적 배열과 동적 배열의 개념과 장단점 : JAVA (11)

오늘은 저번시간에 배운 배열의 단점을 해결할 수 있는 동적 배열에 대해 설명하고 정적 배열과 동적배열의 장단점에 대해 비교한다.

sirobako.co.kr

https://m.blog.naver.com/raylee00/221944085465

 

연결리스트(Linked List)와 배열(Array), 그리고 시간복잡도의 차이에 대해

(자료구조 공부용 포스팅) 연결리스트와 배열이 어떻게 다른거야? 이번 글은 연결리스트중에서도 단일 연결...

blog.naver.com

 

 

 

 

 

 

 

'Study for Backend > Data Structure' 카테고리의 다른 글

[Data Structure 기초] Deque  (0) 2024.02.23
[Data Structure 기초] Linked List  (0) 2024.02.23
[Data Structure 기초] Hashmap  (0) 2024.02.22
[Data Structure기초] Queue  (2) 2024.02.20
[Data Structure기초] Stack  (0) 2024.02.19