Java_배열

song·2023년 10월 11일

Java

목록 보기
13/36

1차원 배열(array)

  • 변수와 비슷하지만 같은 자료형으로 여러개의 값을 저장할 수 있다.
  • 자료형 : Object
  • 배열[], 메서드(), 객체{}
  • ★방번호와 개수는 다르다.
  • 길이 : length
  • 배열 선언 : 타입[] 변수명;
    [ ]괄호는 타입에 붙던 변수명에 붙던 상관없음.
    • 타입[] 변수명 = new 타입[방개수]; -> 선언만 하고 빈방으로 만들기.
    • 타입[] 변수명 = {'', '', ''}; -> 선언과 동시에 초기값도 저장하면서 만들기.
  • ex)
    int[] num_arr = new int[3];
    int num_arr[] = new int[3];
  • ★중요 : 변수는 값이 박스에 다이렉트로 저장되지만 배열은 어딘가에 있는 실제값의 주소값을 참조.
    그래서 sout으로 찍어보면 배열의 주소값이 나옴.
    꼭 직고 싶다면 Arrays 클래스의 toString을 이용하면 값을 출력할 수 있음.
    ex) System.out.println(Arrays.toString(num_arr));
  • java에서는 초기에 설정한 방 개수 이상은 사용할 수 없다.
    방 개수 바꾸려면 배열을 새로 만들어야 한다.

다차원 배열

  • 배열 안의 각 방에 배열이 또 들어가 있는 것.
  • 배열 선언 방법
    • 타입[][] 변수명 new 타입[방개수][방개수];
      ex) int[][] arr = new int[2][3];
  • 가변 배열
    가변 배열방식으로 만들 수 있다.
    다만 이렇게 하면 작은 방은 별도로 선언해야한다.
    ex)
    int[][] arr = new int[2][];
    arr[0] = new int[3];
    arr[0] = new int[2];
    ★나중에 collection 파트에서 ArrayList 배우면 위 가변 배열쓰지 말고 ArrayList쓰자.

배열복사

  • 배열의 복사는 '얕은 복사'와 '깊은 복사'가 있다.

얕은 복사(Shallow Copy)

  • 복사본이나 원본의 값이 변경될 때 서로간의 값이 같이 변경된다.
  • 복사해도 값 바꾸면 다른 복사본도 바뀜.
  • 복사본 = 원본
    ex)
    int[] arr = {10, 20, 30};
    
    int[] shallow_arr = arr;
    arr과 shallow_arr의 주소값이 동일하게 나온다.

깊은 복사(Deep Copy)

  • 복사된 배열이나 원본 배열이 변경되어도 서로간의 값이 변경되지 않는다.
  • 남남. 원본 값 바꿔도 상관없음.
  • 배열을 새로 생성해서 값을 하나하나씩 입력해야함.
    ex)
    int[] deep_arr = new int[arr.length];
    for(int i = 0; i<arr.length; i++){
         deep_arr[i] = arr[i];
     }

배열에서 주로 사용하는 메서드

toString()

  • 출력 전용 메서드
  • 배열 전용 아님
  • 모든 자바 Object에 포함되어 있는 메서드 (그래서 Arrays에도 있음)
  • 배열 자체를 System.out.println()으로 출력하면 데이터가 출력되지 않고 주소값(Object ID)에 출력됨.
  • Arrays.toString()을 이용해서 안에 들어있는 데이터를 출력할 수 있다.

sort()

  • 정렬

  • 배열원소(배열의 방)을 정렬한다.
    원본 배열 자체가 원소들의 정렬된 순서로 변경 됨.

  • 대문자가 제일 앞으로 감.

  • Arrays.sort(배열[]) : 오름차순(asc)

  • Arrays.sort(배열[], Collections.reverseOrder()) : 내림차순(desc)

  • Arrays.sort(배열[], n, m) : n번 방부터 m-1번 방까지만 정렬

  • ex)

    String[] car = {"santaFe", "benz", "bmw", "audi"};
    System.out.println(Arrays.toString(car));
    -> {"santaFe", "benz", "bmw", "audi"} 로 출력.
    
    Arrays.sort(car); -> 기본값 (내림차순, asc)
    System.out.println(Arrays.toString(car));
    -> {"audi", "benz", "bmw", "santaFe"} 로 출력.
    
    Arrays.sort(car, Collections.reverseOrder()); -> 오름차순 (desc)
    System.out.println(Arrays.toString(car));
    -> {"santaFe", "bmw", "benz", "audi"} 로 출력.

copyOf()

  • 깊은 복사
  • 배열을 복사해서 새로운 배열로 반환
  • copyOf(배열[], 가져올 개수)
  • copyOfRange(배열[], 시작방번호, 끝방-1번호) : 특정 범위만 반환
  • ex)
    String[] car_copy = Arrays.copyOf(car, car.length); : 전체 복사
    String[] car_copy = Arrays.copyOfRange(car, 0, 2); : car의 0번방부터 1번방(2-1 방) 값 복사. car_copy의 length는 2
    String[] car_copy = Arrays.copyOfRange(car, 0, 10); : 복사하면서 새롭게 방 추가. (car의 방은 4개 밖에 없을 때 6개가 더 생김)

asList()

  • 배열을 ArrayList로 반환해서 자바 컬렉션 API를 사용할 수 있다.
  • 반환되는 ArrayList는 크기가 고정된 타입으로 새롭게 값을 추가할 수 없다.
  • List<String> car_list = Arrays.asList(car); : Array의 형태를 갖고 있으나 ArrayList처럼 toString없이 값을 바로 출력할 수 있다.
  • List<String> list = new ArrayList<>(Arrays.asList(car)); : Collection의 List 영역. 배열에 값을 추가, 삭제, 전체 삭제가 가능하다.
    • list.add(값) : 추가
    • list.remove(n); : n번방 삭제
    • list.clear() : 전체삭제
profile
계속 나아가기

0개의 댓글