Amenable 2023. 6. 11. 09:45

πŸ“™ 1. λ°°μ—΄μ΄λž€?

  λ°°μ—΄(Array)μ΄λž€ κ°™μ€ νƒ€μž…μ˜ μ—¬λŸ¬ λ³€μˆ˜λ₯Ό ν•˜λ‚˜μ˜ λ¬ΆμŒμœΌλ‘œ λ‹€λ£¨λŠ” κ²ƒμ„ λ§ν•œλ‹€.

  배열을 κ΅¬μ„±ν•˜λŠ” 각각의 값을 λ°°μ—΄ μš”μ†Œ(Element)라고 ν•˜λ©°, λ°°μ—΄μ—μ„œμ˜ μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” μˆ«μžλ₯Ό μΈλ±μŠ€(Index)라고 ν•œλ‹€.

 

 

πŸ“™ 2. λ°°μ—΄ μ„ μ–Έ & 생성 & μ΄ˆκΈ°ν™”

πŸ“Œ 1. λ°°μ—΄ μ„ μ–Έ

  배열을 μ„ μ–Έν•˜λŠ” 방법은 μ›ν•˜λŠ” νƒ€μž…μ˜ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  λ³€μˆ˜ λ˜λŠ” νƒ€μž…μ— λ°°μ—΄μž„μ„ μ˜λ―Έν•˜λŠ” λŒ€κ΄„ν˜Έλ₯Ό 뢙이면 λœλ‹€.

public static void main(String[] args) {
    int[] numbers;
    String[] names;
}

 

πŸ“Œ 2. λ°°μ—΄ 생성

  배열을 μ„ μ–Έν•œ λ‹€μŒμ—λŠ” 배열을 생성해야 ν•œλ‹€. 배열을 μ„ μ–Έν•˜λŠ” 것은 단지 μƒμ„±λœ 배열을 닀루기 μœ„ν•œ μ°Έμ‘°λ³€μˆ˜λ₯Ό μœ„ν•œ 곡간이 λ§Œλ“€μ–΄μ§ˆ 뿐이고, 배열을 μƒμ„±ν•΄μ•Όλ§Œ λΉ„λ‘œμ†Œ 값을 μ €μž₯ν•  수 μžˆλŠ” 곡간이 λ§Œλ“€μ–΄μ§€λŠ” 것이닀.

  배열을 μƒμ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ—°μ‚°μž 'new'와 ν•¨κ»˜ λ°°μ—΄μ˜ νƒ€μž…κ³Ό 길이λ₯Ό μ§€μ •ν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€.

public static void main(String[] args) {
    int[] numbers; // λ°°μ—΄ μ„ μ–Έ
    numbers = new int[10]; // λ°°μ—΄ 생성
}

  λ°°μ—΄ μ„ μ–Έκ³Ό 생성을 λ™μ‹œμ— ν•  μˆ˜λ„ μžˆλ‹€.

public static void main(String[] args) {
    int[] numbers = new int[10];
}

 

πŸ“Œ 3. λ°°μ—΄ μ΄ˆκΈ°ν™”

  배열은 생성과 λ™μ‹œμ— μžλ™μ μœΌλ‘œ μžμ‹ μ˜ νƒ€μž…μ— ν•΄λ‹Ήν•˜λŠ” κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”κ°€ λœλ‹€.

public static void main(String[] args) {
    int[] numbers = new int[3];
    System.out.println(Arrays.toString(numbers)); // [0, 0, 0]
}

  μ›ν•˜λŠ” 값을 μ €μž₯ν•˜λ €λ©΄ μ•„λž˜μ™€ 같이 각 μš”μ†Œλ§ˆλ‹€ 값을 μ§€μ •ν•΄ 쀄 수 μžˆλ‹€.

public static void main(String[] args) {
    int[] numbers = new int[3];
    numbers[0] = 1;
    numbers[1] = 2;
    numbers[2] = 3;
    System.out.println(Arrays.toString(numbers)); // [1, 2, 3]
}

  λ˜ν•œ, λ°°μ—΄ 생성과 μ΄ˆκΈ°ν™”λ₯Ό λ™μ‹œμ— μ§„ν–‰ν•  μˆ˜λ„ μžˆλ‹€. λ°°μ—΄μ˜ κΈΈμ΄λŠ” μ €μž₯ν•  κ°’μ˜ κ°œμˆ˜μ— μ˜ν•΄ μžλ™μœΌλ‘œ κ²°μ •λœλ‹€.

public static void main(String[] args) {
    int[] numbers = new int[]{1, 2, 3};
    System.out.println(Arrays.toString(numbers));
}

  더 κ°„λ‹¨ν•˜κ²ŒλŠ” μ•„λž˜μ™€ 같이 μž‘μ„±ν•  μˆ˜λ„ μžˆλ‹€.

public static void main(String[] args) {
    int[] numbers = {1, 2, 3};
    System.out.println(Arrays.toString(numbers));
}

 

 

πŸ“™ 3. λ°°μ—΄ ν™œμš©

πŸ“Œ 1. λ°°μ—΄ 좜λ ₯

  λ°°μ—΄μ˜ 좜λ ₯은 for문을 μ΄μš©ν•΄μ„œ λ°°μ—΄ 각 μ›μ†Œλ“€μ„ μˆœνšŒν•˜λ©° 좜λ ₯ν•˜κ±°λ‚˜, Arrays.toString() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄μ„œ 배열을 λ¬Έμžμ—΄ ν˜•μ‹μœΌλ‘œ λ§Œλ“€μ–΄ 좜λ ₯ν•  수 μžˆλ‹€.

public static void main(String[] args) {
    int[] numbers = {1, 2, 3};

    // 1. for문 이용
    for(int i : numbers) {
        System.out.print(i); // 123
    }

    // 2. Arrays.toString() 이용
    System.out.println(Arrays.toString(numbers)); // [1, 2, 3]
}

  ν•˜μ§€λ§Œ, λ³€μˆ˜λ₯Ό 직접 좜λ ₯ν•˜λ©΄ μš°λ¦¬κ°€ μ›ν•˜λŠ” 값이 λ‚˜μ˜€μ§€ μ•Šκ²Œ λœλ‹€.

public static void main(String[] args) {
    int[] numbers = {1, 2, 3};
    System.out.println(numbers); // [I@6e2c634b
}

  λ³€μˆ˜ numbersλŠ” 배열을 λ‹€λ£¨λŠ”λ° ν•„μš”ν•œ μ°Έμ‘°λ³€μˆ˜μΌλΏ 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ 곡간이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

 

πŸ“Œ 2. λ°°μ—΄ μ •λ ¬

  λ°°μ—΄μ˜ 정렬은 Arrays.sort() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄μ„œ μ •λ ¬ν•  μˆ˜ μžˆλ‹€.

public static void main(String[] args) {
    // μ˜€λ¦„μ°¨μˆœ μ •λ ¬
    int[] numbers = {5, 3, 1, 2, 4};
    Arrays.sort(numbers);
    System.out.println(Arrays.toString(numbers)); // [1, 2, 3, 4, 5]

    // λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬
    Integer[] integerNumbers = {1, 2, 5, 3, 4};
    Arrays.sort(integerNumbers, Collections.reverseOrder());
    System.out.println(Arrays.toString(integerNumbers)); // [5, 4, 3, 2, 1]
}

 

πŸ“Œ 3. λ°°μ—΄ 비ꡐ

  λ°°μ—΄μ˜ λΉ„κ΅λŠ” for문을 톡해 각각의 μ›μ†Œλ₯Ό λΉ„κ΅ν•˜λŠ” μ‹μœΌλ‘œλ„ κ΅¬ν˜„ν•  수 μžˆμ§€λ§Œ, Arrays.equals() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€.

public static void main(String[] args) {
    int[] numbers = {1, 2, 3};
    int[] equalNumbers = {1, 2, 3};
    int[] notEqualNumbers = {3, 2};

    System.out.println(Arrays.equals(numbers, equalNumbers)); // true
    System.out.println(Arrays.equals(numbers, notEqualNumbers)); // false
}

 

πŸ“Œ 4. λ°°μ—΄ 볡사

  배열을 λ³΅μ‚¬ν•˜λŠ” 첫 번째 λ°©λ²•μœΌλ‘œλŠ” for문을 μ΄μš©ν•  μˆ˜ μžˆλ‹€.

public static void main(String[] args) {
    int[] arr = {1, 2, 3, 4, 5};

    int[] tmp = new int[arr.length * 2]; // 초기 배열보닀 길이가 두배인 μƒˆλ‘œμš΄ 배열을 μ„ μ–Έ

    for(int i = 0; i < arr.length; i++)
        tmp[i] = arr[i];

    arr = tmp;
}

  두 번째 λ°©λ²•μœΌλ‘œλŠ” System.arraycopy() λ©”μ„œλ“œλ‚˜ Arrays.copyOf() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. Arrays.copyOf()λŠ” System.arraycopy()λ₯Ό λž˜ν•‘ν•œ ν•¨μˆ˜μΌ 뿐, λ‘ κ°œκ°€ λ™μΌν•˜λ‹€κ³  λ³΄λ©΄ λœλ‹€.

// 1. System.arraycopy() 이용
public static void main(String[] args) {
    int[] arr = {1, 2, 3, 4, 5};

    int[] tmp = new int[arr.length * 2];

    // (볡사할 λ°°μ—΄, 볡사λ₯Ό μ‹œμž‘ν•  λ°°μ—΄μ˜ μœ„μΉ˜, 뢙여넣을 λ°°μ—΄, λ³΅μ‚¬λœ 배열값듀이 λΆ™μ—¬μ§ˆ μ‹œμž‘ μœ„μΉ˜, 볡사할 길이)
    System.arraycopy(arr, 0, tmp, 0, arr.length);
}

// 2. Arrays.copyOf() 이용
public static void main(String[] args) {
    int[] arr = {1, 2, 3, 4, 5};

    int[] tmp = new int[arr.length * 2];

    tmp = Arrays.copyOf(arr, arr.length);
}

 

 

πŸ“™ 4. 닀차원 λ°°μ—΄

μ§€κΈˆκΉŒμ§€λŠ” 1차원 배열에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄μ•˜λŠ”λ°, 닀차원 λ°°μ—΄(2차원 μ΄μƒμ˜ λ°°μ—΄)에 λŒ€ν•΄μ„œλ„ μ•Œμ•„λ³΄μž. 닀차원 배열은 2차원 λ°°μ—΄ μ˜ˆμ‹œλ₯Ό ν†΅ν•΄μ„œ μ•Œμ•„λ³΄μž.

  2차원 배열을 μ„ μ–Έν•˜λŠ” 방법은 1차원 λ°°μ—΄κ³Ό λ™μΌν•œλ°, λ‹€λ§Œ κ΄„ν˜Έκ°€ ν•˜λ‚˜ 더 λ“€μ–΄κ°ˆ 뿐이닀.

public static void main(String[] args) {
    int[][] score = new int[4][3];
}

  μœ„μ—μ„œ μƒμ„±λœ 2차원 배열은 4ν–‰ 3μ—΄μ˜ μ €μž₯ 곡간을 κ°€μ§ˆ 수 μžˆλ‹€.

 

 

πŸ“™ 5. κ°€λ³€λ°°μ—΄

  2차원 μ΄μƒμ˜ 닀차원 배열을 생성할 λ•Œ 전체 λ°°μ—΄ 차수 쀑 λ§ˆμ§€λ§‰ 차수의 길이λ₯Ό μ§€μ •ν•˜μ§€ μ•Šκ³ , 좔후에 각기 λ‹€λ₯Έ 길이의 배열을 μƒμ„±ν•¨μœΌλ‘œμ¨ κ³ μ •λœ ν˜•νƒœκ°€ μ•„λ‹Œ 보닀 μœ λ™μ μΈ κ°€λ³€ 배열을 ꡬ성할 수 μžˆλ‹€.

public static void main(String[] args) {
    int[][] score = new int[4][];
    score[0] = new int[1];
    score[1] = new int[5];
    score[2] = new int[3];
    score[3] = new int[6];
}

 

ν•΄λ‹Ή 글은
남ꢁ성 λ‹˜μ˜ 'μžλ°”μ˜ 정석',
Inpa λ‹˜μ˜ 'JAVA λ°°μ—΄(Array) μ™„λ²½ 닀루기 κ°€μ΄λ“œ'
λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.