ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바의정석 Arrays여러가지 메서드
    Java/자바의정석 2023. 2. 27. 23:28
    반응형

    Arrays의 여러가지 메서드

    메서드 설명
    sort() 정렬
    asList 배열을 ArrayList로 변환
    copyOf() 배열을 복사
    copyOfRanger() 특정 범위를 지정하여 복사
    fill() 배열 채우기

    위와같은 메서드 외에도 많은것들이 있다.

     

    우선 자바의정석 예제로 나온 코드를 보며 실습을 해보자.

    package JavaChap11;
    import java.util.*;
    
    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));
            System.out.println("arr2D="+Arrays.deepToString(arr2D));
    
            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));
            System.out.println("arr3="+Arrays.toString(arr3));
            System.out.println("arr4="+Arrays.toString(arr4));
            System.out.println("arr5="+Arrays.toString(arr5));
            System.out.println("arr6="+Arrays.toString(arr6));
    
            int[] arr7 =  new int[5];
            Arrays.fill(arr7, 9);  // arr=[9,9,9,9,9]
            System.out.println("arr7="+Arrays.toString(arr7));
    
            Arrays.setAll(arr7, i -> (int)(Math.random()*6)+1);
            System.out.println("arr7="+Arrays.toString(arr7));
    
            for(int i : arr7) { 
                char[] graph = new char[i];
                Arrays.fill(graph, '*');
                System.out.println(new String(graph)+i);
            }
    
            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));
            System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B'));
            System.out.println("= After sorting =");
            Arrays.sort(chArr); //binary를 사용하기전에는 정렬을 먼저
            System.out.println("chArr="+Arrays.toString(chArr));
            System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B'));
        }
    }

    ====================실행결과======================

    arr=[0, 1, 2, 3, 4]
    arr2D=[[11, 12, 13], [21, 22, 23]]
    arr2=[0, 1, 2, 3, 4]
    arr3=[0, 1, 2]
    arr4=[0, 1, 2, 3, 4, 0, 0]
    arr5=[2, 3]
    arr6=[0, 1, 2, 3, 4, 0, 0]
    arr7=[9, 9, 9, 9, 9]
    arr7=[6, 6, 5, 4, 6]
    ******6
    ******6
    *****5
    ****4
    ******6
    false
    true
    chArr=[A, D, C, B, E]
    index of B =-2
    = After sorting =
    chArr=[A, B, C, D, E]
    index of B =1


     

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

    arr의 1차원 배열, arr2D의 2차원 배열을 생성하였다.

    값을 읽어오기위해 toString메서드를 오버라이딩하였는데 여기서 arr2D는 2차원배열이기때문에

    deep을 붙여주어야한다.

     

     

    copyOf() - 배열복사

    int[] arr2 = Arrays.copyOf(arr, arr.length);
    int[] arr3 = Arrays.copyOf(arr, 3);
    int[] arr4 = Arrays.copyOf(arr, 7); // 7개를 복사하는데 갯수가 부족하면 0
    int[] arr5 = Arrays.copyOfRange(arr, 2, 4);// 2~4까지 복사
    int[] arr6 = Arrays.copyOfRange(arr, 0, 7);
    0 1 2 3 4

    이와같이 arr배열이 있다. arr2에는 arr배열을 arr.length만큼 복사하므로 전체가 복사된다.

     

    arr3의 경우 복사대상 : arr / 길이:3까지

    0 1 2

     

    arr4의 경우 복사대상 : arr / 길이 : 7까지

    0 1 2 3 4 0 0

    길이가 복사대상을 초과한다면 빈 자리는 0으로 채운다.

     

    arr5의 경우 특정범위를 지정한다. 복사대상 : arr / 범위 : 2~4 => 2<= x <4

    2 3

     

    arr6의 경우 복사대상 : arr / 범위 : 0~7

    0 1 2 3 4 0 0

     

    fill() - 배열채우기

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

    길이가 5인 arr7배열을 생성한다.

    그리고 fill을 이용하여 대상 : arr7 / 내용 : 9

    9 9 9 9 9

     

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

    람다식을 통해 random으로 배열의 내용을 변경해주었다.

    6 6 5 4 6

     

    for(int i : arr7) { 
        char[] graph = new char[i];
        Arrays.fill(graph, '*');
        System.out.println(new String(graph)+i);
    }

    위의 코드는 향상된 for문을 사용하였다. : arr7의 요소를 순서대로 꺼내서 i에다가 집어넣는것   

    for(int x=0; x<arr7.length; x++{
        int i = arr7[x];

    와같이 이해하면된다.

     

    2차원배열 equals

    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
    

    2차원배열에는 모두 deep을 붙여주어야한다.

     

     

    binarySearch() - 이진 탐색 알고리즘은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 기능

    char[] chArr = { 'A', 'D', 'C', 'B', 'E' };
    
    System.out.println("chArr="+Arrays.toString(chArr));
    System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B'));
    System.out.println("= After sorting =");
    Arrays.sort(chArr); //binary를 사용하기전에는 정렬을 먼저
    System.out.println("chArr="+Arrays.toString(chArr));
    System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B'));

    보기와같이 B를 찾는 과정인데  sort()를 통해 정렬을 해주지 않고 binarySearch()를 사용한다면

    값이 정확하게 나오지 않는다.

    binarySearch를 하기전에는 반드시 sort()를 한 뒤에 실행하자!

    반응형

    'Java > 자바의정석' 카테고리의 다른 글

    자바 [JAVA] - HashSet개념 및 활용  (0) 2023.02.27
    자바의정석 Comparator 활용하기  (0) 2023.02.27
    자바 Iterator란?  (0) 2023.02.27
    자바 Queue 활용해보기  (0) 2023.02.27
    Stack 활용해보기  (0) 2023.02.27

    댓글

Designed by Tistory.