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
[ 개념 ] 자바 배열(Array) 문법 사용법 복사
1. 배열(Array)이란? 자바 배열(Array)은 동일한 유형의 데이터 타입을 저장할 수 있는 데이터 구조입니다. Java의 배열은 셀로 나누어진 연속적인 메모리 블록을 포함하는 객체이며 각 블록은 배열의
hak0205.com
[Java] 코딩테스트 기초 문법 - Array
Java의 Array란? 배열(Array) 하나의 변수에 여러 값을 저장하는 데에 쓰이는 정적 리스트(static list) 즉, 지정된 자료형(String, int, ···)의 집합을 담는 또 하나의 자료형 > 💡 Python의 List와 비교 > >
velog.io
[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 |