Data Structure

[자료구조] Array와 Arrays class(java.util.Arrays)

openDeveloper 2023. 3. 15. 15:16

1. Array 

Array는 많은 수의 데이터를 다룰 때 사용되는 자료 구조로 각 데이터를 인덱스로 1:1 대응하도록 구성되어 있고, 데이터가 메모리 상 연속적으로 저장되어 있다.

Data 'a' 'b' 'c'
Index 0 1 2

 

char[] arr = {'a','b','c'};

arr[0]; // 'a'
arr[1]; // 'b'
arr[2]; // 'c'

배열은 인덱스를 이용해 데이터에 빠르게 접근이 가능하지만, 선언할 때에 미리 최대 길이를 정해서 생성해야 한다.

char[] arr = new char[3];

char[] arr = {'a','b','c'};

 

배열의 시간 복잡도

 

Access O(1)
Search O(n)
Add, delete O(n)

 

Access : 배열의 인덱스 번호를 알고 있다면, 접근하는 데에는 O(1) 시간 복잡도를 갖는다.

Search : 인덱스 0 ~ array.length 까지 비교하므로 O(n)의 시간 복잡도를 갖는다.

Add, delete : 인덱스를 정확히 알고 있다면, O(1)로 삭제가 가능하겠지만 일반적으로 search하여 삭제하므로 O(n)의 시간 복잡도를 갖는다.

 

2. Arrays Class

 

java.util.Arrays 클래스
Arrays 클래스에는 배열을 다루기 위한 다양한 메소드가 포함되어 있습니다.
Arrays 클래스의 모든 메소드는 클래스 메소드(static method)이므로, 객체를 생성하지 않고도 바로 사용할 수 있습니다.
이 클래스는 java.util 패키지에 포함되므로, 반드시 import 문으로 java.util 패키지를 불러오고 나서 사용해야 합니다.

 

Arrays 클래스의 메소드는 매우 다양하며, 그중에서 많이 사용되는 메소드는 다음과 같습니다.

메소드설명

static <T> List<T> asList(T... a) 전달받은 배열을 고정 크기의 리스트(list)로 변환하여 반환함.
static int binarySearch(Object[] a, Object key) 전달받은 배열에서 특정 객체를 이진 검색 알고리즘을 사용하여 검색한 후, 그 위치를 반환함.
static <T> T[] copyOf(T[] original, int newLength) 전달받은 배열을 특정 길이의 새로운 배열로 복사하여 반환함.
static <T> T[] copyOfRange(T[] original, int from, int to) 전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사하여 반환함.
static boolean equals(Object[] a, Object[] a2) 전달받은 두 배열이 같은지를 확인함.
static void fill(Object[] a, Object val) 전달받은 배열의 모든 요소를 특정 값으로 초기화함.
static void sort(Object[] a) 전달받은 배열의 모든 요소를 오름차순으로 정렬함.

 

binarySearch() 메소드
binarySearch() 메소드는 전달받은 배열에서 특정 객체의 위치를 이진 검색 알고리즘을 사용하여 검색한 후, 해당 위치를 반환합니다. 이 메소드는 이진 검색 알고리즘을 사용하므로, 매개변수로 전달되는 배열이 sort() 메소드 등을 사용하여 미리 정렬되어 있어야만 제대로 동작합니다.

 

copyOf() 메소드
copyOf() 메소드는 전달받은 배열의 특정 길이만큼을 새로운 배열로 복사하여 반환합니다.
copyOf() 메소드는 첫 번째 매개변수로 원본 배열을 전달받고, 두 번째 매개변수로 원본 배열에서 새로운 배열로 복사할 요소의 개수를 전달받습니다. 그리고 원본 배열과 같은 타입의 복사된 새로운 배열을 반환합니다.

 

copyOfRange() 메소드
copyOfRange() 메소드는 전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사하여 반환합니다.
copyOfRange() 메소드는 첫 번째 매개변수로 복사의 대상이 될 원본 배열을 전달받습니다. 두 번째 매개변수로는 원본 배열에서 복사할 시작 인덱스를 전달받고, 세 번째 매개변수로는 마지막으로 복사될 배열 요소의 바로 다음 인덱스를 전달받습니다. 즉, 세 번째 매개변수로 전달된 인덱스 바로 전까지의 배열 요소까지만 복사됩니다. 그리고 원본 배열과 같은 타입의 복사된 새로운 배열을 반환합니다.

 

fill() 메소드
fill() 메소드는 전달받은 배열의 모든 요소를 특정 값으로 초기화해 줍니다.fill() 메소드는 첫 번째 매개변수로 초기화할 배열을 전달받고, 두 번째 매개변수로 초기값을 전달받습니다. 따라서 이 메소드는 전달받은 원본 배열의 값을 변경하게 됩니다.

 

sort() 메소드
sort() 메소드는 전달받은 배열의 모든 요소를 오름차순으로 정렬합니다. sort() 메소드는 매개변수로 정렬할 배열을 전달받으며, 따라서 이 메소드는 전달받은 원본 배열의 순서를 변경하게 됩니다.

 

 

출처 : http://www.tcpschool.com/java/java_api_arrays

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

[자료구조] Heap  (0) 2023.03.19
[자료구조] LinkedList  (0) 2023.03.17
[자료구조] HashMap : java.util.HashMap  (0) 2023.03.16
[자료구조] Queue  (0) 2023.03.14
[자료구조] Stack  (0) 2023.03.13