[JAVA] Arrays ํด๋ž˜์Šค


Contents


Arrays ํด๋ž˜์Šค

  • java.util ํŒจํ‚ค์ง€์— ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.
  • ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • ์ƒ๋‹จ์— import java.util.Arrays;๋ฅผ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

1. Arrays.sort(๋ฐฐ์—ด, ๊ตฌ๊ฐ„) ๋ฉ”์†Œ๋“œ

  • ๋งค๊ฐœ๋ณ€์ˆ˜
    • ๋ฐฐ์—ด - ์›๋ณธ ๋ฐฐ์—ด
    • ๊ตฌ๊ฐ„(์‹œ์ž‘ index, ๋งˆ์ง€๋ง‰+1 index) - ์ •๋ ฌ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ์›์†Œ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.
      • ์‹œ์ž‘ index - ์ •๋ ฌ์„ ์‹œ์ž‘ํ•  index
      • ๋งˆ์ง€๋ง‰+1 index - ์ •๋ ฌํ•  ์›์†Œ์˜ ๋งˆ์ง€๋ง‰ index

์ „๋‹ฌ๋ฐ›์€ ๋ฐฐ์—ด์—์„œ ์›์†Œ๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

๋ฐฐ์—ด์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด ์ธ์ž์— ์ถ”๊ฐ€๋กœ Collections ํด๋ž˜์Šค์— Collections.reverseOrder()์„ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค.

import java.util.Arrays;
import java.util.Collections;
...
int[] arr1 = {4, 5, 2, 3};
String[] arr2 = {"A", "B", "Z", "T", "D"};
int[] arr3 = {9, 5, 7, 8, 9, 5, 3, 1};
int[] arr4 = {1, 2, 3, 4, 5};

Arrays.sort(arr1); // arr ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
Arrays.sort(arr2);

Arrays.sort(arr3, 3, 7); // 3 ~ 6 index์˜ ์›์†Œ๋งŒ ์ •๋ ฌ

// error ๋ฐœ์ƒ!!!!
Arrays.sort(arr4, Collections.reverseOrder());

// ์‹คํ–‰ ๊ฒฐ๊ณผ ===========
// arr1 = {2, 3, 4, 5};
// arr2 = {"A", "B", "D", "T", "Z"};
// arr3 = {9, 5, 7, 3, 5, 8, 9, 1};


๋งŒ์•ฝ ์œ„์™€ ๊ฐ™์ด ์‹คํ–‰ํ•  ๊ฒฝ์šฐ Arrays.sort(arr4, Collections.reverseOrder());์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.

The method sort(int[]) in the type Arrays is not applicable for the arguments (int[], Collections.reverseOrder())

Collections.reverseOrder()์€ ๊ฐ์ฒด์—๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋ฉ”์†Œ๋“œ์ด๋‹ค.

ํ•˜์ง€๋งŒ arr4๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(primitive type)์ธ int ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
    • int[]๊ฐ€ ์•„๋‹Œ Integer[]์„ ํ†ตํ•ด ๊ฐ์ฒด๋กœ ์„ ์–ธํ•˜๋ฉด ๋œ๋‹ค.
      import java.util.Arrays;
      import java.util.Collections;
      ...
      Integer[] arr4 = {1, 2, 3, 4, 5};
    
      Arrays.sort(arr4, Collections.reverseOrder());
      // ์‹คํ–‰ ๊ฒฐ๊ณผ ===========
      // arr4 = {5, 4, 3, 2, 1};
    


2. Arrays.copyOf(๋ฐฐ์—ด, ๊ธธ์ด) ๋ฉ”์†Œ๋“œ

  • ๋งค๊ฐœ๋ณ€์ˆ˜
    • ๋ฐฐ์—ด - ์›๋ณธ ๋ฐฐ์—ด
    • ๊ธธ์ด - ์ƒˆ๋กœ ์ƒ์„ฑํ•  ๋ฐฐ์—ด์˜ ํฌ๊ธฐ

์ „๋‹ฌ๋ฐ›์€ ๋ฐฐ์—ด์„ ์ „๋‹ฌ๋ฐ›์€ ๊ธธ์ด์˜ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ์›๋ณธ ๋ฐฐ์—ด๋ณด๋‹ค ๊ธธ๋ฉด, ๋‚˜๋จธ์ง€ ์š”์†Œ๋Š” ๋ฐฐ์—ด์˜ ์ž๋ฃŒํ˜•์— ๋งž๊ฒŒ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ง„๋‹ค.
  • ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ์›๋ณธ ๋ฐฐ์—ด๋ณด๋‹ค ์ž‘์œผ๋ฉด, ํ•ด๋‹น ๊ธธ์ด๊นŒ์ง€์˜ ์š”์†Œ๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
int[] arr1 = {1, 2, 3}; // ํฌ๊ธฐ๊ฐ€ 3์ธ intํ˜• ๋ฐฐ์—ด arr1 ์ƒ์„ฑ

// arr1์™€ ๋™์ผํ•œ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ํฌ๊ธฐ๊ฐ€ 5์ธ ๋ฐฐ์—ด ์ƒ์„ฑ
int[] arr2 = Arrays.copyOf(arr1, 5);

// arr1์™€ ๋™์ผํ•œ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ํฌ๊ธฐ๊ฐ€ 2์ธ ๋ฐฐ์—ด ์ƒ์„ฑ
int[] arr3 = Arrays.copyOf(arr1, 2);

// ์‹คํ–‰ ๊ฒฐ๊ณผ ===========
// arr1 = {1, 2, 3};
// arr2 = {1, 2, 3, 0, 0};
// arr3 = {1, 2};


copyOf()๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

int[] arr = { 1, 2, 3 };
int[] tmp = arr;
arr = new int[arr.length + 3];
for (int i = 0; i < tmp.length; i++) {
    arr[i] = tmp[i];
}


3. Arrays.toString(๋ฐฐ์—ด) ๋ฉ”์†Œ๋“œ

  • ๋งค๊ฐœ๋ณ€์ˆ˜
    • ๋ฐฐ์—ด - ๊ฐ’์„ ์ถœ๋ ฅํ•  ๋ฐฐ์—ด

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋ฐฐ์—ด์— ์ •์˜๋œ ๊ฐ’๋“ค์„ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

import java.util.Arrays;

...

int[] arr = {1, 2, 3};
System.out.println(Arrays.toString(arr));

// ์‹คํ–‰ ๊ฒฐ๊ณผ ===========
// [1, 2, 3]


4. Arrays.copyOfRange(๋ฐฐ์—ด, ์‹œ์ž‘์ธ๋ฑ์Šค, ๋งˆ์ง€๋ง‰์ธ๋ฑ์Šค) ๋ฉ”์†Œ๋“œ

  • ๋งค๊ฐœ๋ณ€์ˆ˜
    • ๋ฐฐ์—ด - ์›๋ณธ ๋ฐฐ์—ด
    • ์‹œ์ž‘ ์ธ๋ฑ์Šค - ๋ฐฐ์—ด์„ ์ž๋ฅผ ์ธ๋ฑ์Šค์˜ ์œ„์น˜
    • ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค - ์ž…๋ ฅ๋œ ์ˆซ์ž -1 ๊นŒ์ง€ ๋ฐฐ์—ด์„ ๋ถ„๋ฆฌํ•จ

์ž…๋ ฅ๋ฐ›์€ ๋ฐฐ์—ด์„ ์‹œ์ž‘ ์ธ๋ฑ์Šค ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ธ๋ฐ์Šค -1 ๊นŒ์ง€์˜ ๊ฐ’์˜ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์›๋ณธ ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

import java.util.Arrays;

int[] arr1 = {1, 2, 3, 4, 5, 6, 7};
int[] arr2 = Arrays.copyOfRange(arr, 3, arr.length);

System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
// ์‹คํ–‰ ๊ฒฐ๊ณผ ===========
// [ 1, 2, 3, 4, 5, 6, 7]
// [ 4, 5, 6, 7]





ยฉ 2022. by Yejin Ha

Powered by JihyunRyu