🎥Back/자바의 정석

[JAVA의 정석]Arrays

i_zzy 2024. 1. 17. 14:38

이 글은 유튜브 '자바의 정석 - 기초편'을 보고 정리한 글입니다. 

 

📂content

1. 배열을 다루기 편리한 메서드(static) 제공 

비슷한 것으로 Math, Objects, Collections라는 클래스가 있고 유용한 메서드를 제공한다. 

 

 

⚝ 배열의 출력 - toString()

static String toString(boolean[] a)

static String toString(byte[] a)

static String toString(char[] a)

static String toString(short[] a)

static String toString(int[] a)

static String toString(long[] a)

static String toString(float[] a)

static String toString(double[] a)

static String toString(Object[] a)

 

 

⚝ 배열의 복사 - copyOf(), copyOfRange()

int[] arr = {0,1,2,3,4};

int[] arr2 = Arrays.copyOf(arr, arr.length) //arr2 = [0, 1, 2, 3, 4]
int[] arr3 = Arrays.copyOf(arr, 3) //arr3 = [0, 1, 2]
int[] arr4 = Arrays.copyOf(arr, 7) //arr4 = [0, 1, 2, 3, 4, 0, 0]

int[] arr5 = Arrays.copyOfRange(arr, 2, 4) //arr5 = [2, 3] <- 4는 불포함
int[] arr6 = Arrays.copyOfRange(arr, 0, 7) //arr6 = [0, 1, 2, 3, 4, 0, 0]
from~to이면 <= x < 라서 뒤의 값은 안 들어간다. 

 

 

⚝ 배열 채우기 - fill(), setAll()

int[] arr = new int[5];
Arrays.fill(arr, 9); //arr = [9, 9, 9, 9, 9]

//람다식
Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1); //arr = [1, 5, 2, 1, 1]

 

 

⚝ 배열의 정렬과 검색 - sort(), binarySearch()

int[] arr = {3, 2, 0, 1, 4};
//배열에서 2가 어디있는지 찾는 것 
int idx = Arrays.binarySearch(arr, 2); //idx = -5 <- 잘못된 결과

Arrays.sort(arr); //배열 arr을 정렬한다. 
System.out.println(Arrays.toString(arr)); //[0, 1, 2, 3, 4]
int idx = Arrays.binarySearch(arr, 2); //idx = 2 <- 올바른 결과
이진탐색은 정렬된 배열에만 가능하다. 

 

 

 

알아두면 좋다! - 순차 검색과 이진(이분) 검색

 

- 순차검색 : 하나씩 앞에서부터 보면서 순서대로 찾는 것. (for문)

 

- 이진 검색 : 반씩 잘라가면서 비교한다. 

 

 

 

⚝ 다차원 배열의 출력 - deepToString()

int[] arr = {0, 1, 2, 3, 4};
int[][] arr2D = {{11, 12}, {21, 22}};

System.out.println(Arrays.toString(arr)); //[0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2D)); //[[11, 12], [21, 22]]

 

 

 

⚝ 다차원 배열의 비교 - deepEquals()

String[][] str2D = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D2 = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};

System.out.println(Arrays.equals(str2D, str2D2)); //false 
System.out.println(Arrays.deepEquals(str2D, str2D2)); //true

 

 

 

 

⚝ 배열을 List로 변환 - asList(Object... a)

List list = Arrays.asList(new Integer[]{1, 2, 3, 4, 5}); //list = [1, 2, 3, 4, 5]
List list = Arrays.asList(1, 2, 3, 4, 5);
list.add(6); //UnsupportedOperationException 예외발생

List list = new ArrayList(Arrays.asList(1, 2, 3, 4, 5));
- Object...는 가변 매개변수를 의미한다. 따라서 매개변수 여러개를 넣어도 된다는 것이다. 가변은 갯수가 정해져 있지 않다는 것이다. 아니면 배열을 넣으면 된다. 
- List의 특징은 읽기 전용이다. 따라서 add() 메소드를 사용하면 예외가 뜬다. 그렇기 때문에 ArrayList로 만들어주어야 한다. 

 

 

 

람다와 스트림(14장) 관련 - parallelXXX(), spliterator(), stream()

 

 

 

⍟실습

더보기
package etc;

import java.util.Arrays;

public class Ex11_6 {
    public static void main(String[] args) {
        int[]  arr   = {0,1,2,3,4};
        int[][]	arr2D = {{11,12,13}, {21,22,23}};

        System.out.println("arr="+ Arrays.toString(arr)); //arr=[0, 1, 2, 3, 4]
        System.out.println("arr2D="+Arrays.deepToString(arr2D));//arr2D=[[11, 12, 13], [21, 22, 23]]

        int[] arr2 = Arrays.copyOf(arr, arr.length);
        int[] arr3 = Arrays.copyOf(arr, 3);
        int[] arr4 = Arrays.copyOf(arr, 7);
        int[] arr5 = Arrays.copyOfRange(arr, 2, 4);
        int[] arr6 = Arrays.copyOfRange(arr, 0, 7);

        System.out.println("arr2="+Arrays.toString(arr2)); //arr2=[0, 1, 2, 3, 4]
        System.out.println("arr3="+Arrays.toString(arr3)); //arr3=[0, 1, 2]
        System.out.println("arr4="+Arrays.toString(arr4)); //arr4=[0, 1, 2, 3, 4, 0, 0]
        System.out.println("arr5="+Arrays.toString(arr5)); //arr5=[2, 3]
        System.out.println("arr6="+Arrays.toString(arr6)); //arr6=[0, 1, 2, 3, 4, 0, 0]

        int[] arr7 =  new int[5];
        Arrays.fill(arr7, 9);  // arr=[9,9,9,9,9]
        System.out.println("arr7="+Arrays.toString(arr7)); //arr7=[9, 9, 9, 9, 9]

        Arrays.setAll(arr7, i -> (int)(Math.random()*6)+1);
        System.out.println("arr7="+Arrays.toString(arr7)); //arr7=[5, 1, 6, 2, 4]

        for(int i : arr7) { //향상된 for문
            //for(int i = 0; i<arr7.length; i++)
            char[] graph = new char[i];
            Arrays.fill(graph, '*');
            System.out.println(new String(graph)+i);
            /**
             * *****5
             * *1
             * ******6
             * **2
             * ****4
             */
        }

        String[][] str2D  = new String[][]{{"aaa","bbb"},{"AAA","BBB"}};
        String[][] str2D2 = new String[][]{{"aaa","bbb"},{"AAA","BBB"}};

        System.out.println(Arrays.equals(str2D, str2D2));     // false
        System.out.println(Arrays.deepEquals(str2D, str2D2)); // true

        char[] chArr = { 'A', 'D', 'C', 'B', 'E' };

        System.out.println("chArr="+Arrays.toString(chArr)); //chArr=[A, D, C, B, E]
        System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B')); //index of B =-2
        System.out.println("= After sorting =");
        Arrays.sort(chArr);
        System.out.println("chArr="+Arrays.toString(chArr)); //chArr=[A, B, C, D, E]
        System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B')); //index of B =1

    }
}

 

 

 

 

 

 

출처