JavaRush /Java Blog /Random-KO /Java의 배열에 관한 것

Java의 배열에 관한 것

Random-KO 그룹에 게시되었습니다
안녕하세요! 이전에는 훈련 중에 단일 객체(또는 기본 유형)를 사용하여 작업했습니다. 하지만 하나의 개체가 아닌 전체 그룹을 대상으로 작업해야 한다면 어떻게 해야 할까요? 예를 들어, 우리 회사의 모든 직원의 생일 목록을 만들고 싶습니다. 예를 들어 "Andrey Petrov, 1월 25일" 형식으로 30줄이 포함되어야 합니다. 여기서는 특별한 데이터 구조인 배열이 도움이 될 것입니다. 배열을 실제 사물과 비교해 보면 그 구조는 세포가 있는 은행 금고와 매우 유사합니다. Java의 배열에 관한 것 - 1배열도 세포로 구성됩니다. 각 셀에 무언가를 넣을 수 있습니다. 이 경우 콘텐츠에 접근하려면 휴대폰 번호를 알아야 합니다. 배열은 다음과 같이 생성됩니다.
public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10]; // array of Java strings

   }
}
여기서는 10개의 셀로 구성된 배열을 만들었습니다. 어레이의 일부 기능에 즉시 주의를 기울일 수 있습니다.
  1. 엄격하게 정의된 유형의 데이터를 저장합니다. 처음에 문자열 배열을 생성했다면 String그 안에 다른 어떤 것도 저장할 수 없습니다. 데이터 유형은 배열을 생성할 때 지정됩니다. 이것이 고객이 원하는 것은 무엇이든 저장할 수 있는 안전 금고와 구별되는 점입니다.
  2. 배열은 기본 유형(예: int), 문자열( String) 또는 동일한 클래스의 객체 데이터를 저장할 수 있습니다. 보다 정확하게는 개체 자체가 아니라 이러한 개체에 대한 링크입니다.
  3. 배열의 크기는 생성 중에 지정되어야 합니다. 나중에 지정하거나 생성 후에 크기를 조정할 수 없습니다.
[]Java는 표현식의 양쪽에 대괄호를 사용하여 배열이 생성됨을 나타냅니다 . 참조 변수 이름 앞이나 뒤에 지정할 수 있습니다. 두 가지 방법 중 하나로 작동합니다.
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
배열에 무언가를 쓰려면 값이 쓰여질 셀의 번호를 지정해야 합니다. 배열 셀 번호는 0부터 시작합니다. 프로그래밍에서는 0부터 시작하는 것이 일반적인 관행입니다. 익숙해지는 속도가 빠를수록 좋습니다 :) 즉, 배열의Java의 배열에 관한 것 - 2 첫 번째 셀에 값을 입력하려면 다음과 같이 수행됩니다.
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
   }
}
이제 동료의 생일을 포함하는 배열의 첫 번째 셀에 Lena의 생일이 포함된 문자열이 포함됩니다. 비유하자면 다른 값을 추가할 수 있습니다.
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";
   }
}
참고: Olesya의 생일을 8번째 셀에 추가했습니다(7번 셀이 8번째 셀인 이유를 잊으셨나요?). 다른 모든 셀은 채워지지 않았지만. 배열에 값을 순서대로 쓸 필요는 없습니다. 그러한 제한은 없습니다. 반면에 순서대로 작성하면 사용 가능한 셀과 점유된 셀의 수를 추적하는 것이 훨씬 쉬우며 배열에 "구멍"이 남지 않습니다. 은행 셀의 경우처럼 배열 셀의 내용을 얻으려면 해당 셀의 번호를 알아야 합니다. 이는 다음과 같이 수행됩니다.
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       String olesyaBirthday = birthdays[7];
       System.out.println(olesyaBirthday);
   }
}
콘솔 출력:

Олеся Остапенко, 3 января
우리는 변수를 생성 String하고 컴파일러에게 "배열에서 인덱스 7이 있는 셀을 찾아 birthdays거기에 저장된 값을 변수에 할당합니다 String olesyaBirthday."라고 말했습니다. 그것이 바로 그가 한 일입니다.

자바 배열 길이

배열로 작업할 때 특수 속성 - 을 사용하여 길이를 쉽게 알아낼 수 있습니다 length.
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
콘솔 출력:

10
메모:이 속성은 length채워진 셀 수가 아니라 배열의 크기를 저장합니다. 배열은 3개의 값만 저장하지만 배열을 만들 때 크기 = 10으로 지정했습니다. 이것이 필드가 반환하는 값입니다 length. 이것이 왜 유용할까요? 예를 들어, 모든 생일 목록을 콘솔에 인쇄하려는 경우(잊은 사람이 없는지 확인하기 위해) 간단한 하나의 루프로 이 작업을 수행할 수 있습니다.
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[2] = "Vika Ignatova, July 12";
       birthdays[3] = "Denis Kozlov, September 7";
       birthdays[4] = "Maxim Maslennikov, November 9";
       birthdays[5] = "Roman Baranov, August 14";
       birthdays[6] = "Valery Pyatkina, April 1";
       birthdays[7] = "Olesya Ostapenko, January 3";
       birthdays[8] = "Kostya Gurko, October 19";
       birthdays[9] = "Seryozha Naumov, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
i루프에서 처음에 0과 동일한 변수를 만듭니다 . 각 패스마다 배열에서 인덱스 i가 있는 셀을 가져와 해당 값을 콘솔에 인쇄합니다. 루프는 10번 반복되며 i 값은 배열의 셀 인덱스에 따라 0에서 9로 증가합니다! birthdays[0]이런 식으로 에서 까지 의 모든 값을 콘솔에 출력하게 되는데 birthdays[9] , 실제로 배열을 다르게 만드는 방법도 있습니다. 예를 들어 숫자 배열은 int다음과 같이 만들 수 있습니다.
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
이 방법을 "빠른 초기화"라고 합니다. 즉시 배열을 생성하고 값으로 채울 수 있다는 점에서 매우 편리합니다. 배열의 크기를 명시적으로 지정할 필요가 없습니다. 필드는 length빠른 초기화 중에 자동으로 채워집니다.
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
       System.out.println(numbers.length);
   }
}
콘솔 출력:

9

자바 객체 배열

객체 배열과 프리미티브 배열이 메모리에 다르게 저장된다는 것을 이미 들어보셨습니다. 예를 들어 세 개의 객체로 구성된 배열을 살펴보겠습니다 Cat.
public class Cat {

   private String name;

   public Cat(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

       Cat[] cats = new Cat[3];
       cats[0] = new Cat("Thomas");
       cats[1] = new Cat("Hippopotamus");
       cats[2] = new Cat("Philip Markovich");
   }
}
여기서 이해해야 할 몇 가지 사항이 있습니다.
  1. 프리미티브의 경우 Java 배열은 많은 특정 값(예: 숫자 int)을 저장합니다. 객체의 경우 배열은 많은 참조를 저장합니다. 배열은 cats세 개의 셀로 구성되며 각 셀에는 개체에 대한 참조가 포함되어 있습니다 Cat. 각 링크는 해당 객체가 저장된 메모리의 주소를 가리킵니다.
  2. 배열 요소는 단일 블록의 메모리에 저장됩니다. 이는 보다 효율적이고 빠른 액세스를 위해 수행됩니다. 따라서 링크는 cats모든 개체(배열의 요소)가 저장되는 메모리의 블록을 가리킵니다. A cats[0]- 이 블록 내의 특정 주소로.
Java의 배열에 관한 것 - 3배열은 객체를 저장할 수 있을 뿐만 아니라 그 자체가 객체라는 점을 이해하는 것이 중요합니다.

배열의 배열 또는 2차원 배열

이를 바탕으로 우리는 질문에 직면하게 됩니다. 예를 들어 문자열이나 숫자의 배열이 아니라 배열의 배열을 만들 수 있습니까? 그러면 대답은 이렇습니다. 예, 가능합니다! 배열은 다른 배열을 포함하여 그 안에 모든 개체를 저장할 수 있습니다. 이러한 배열을 2차원 배열이라고 합니다. 그림으로 표현하면 일반 테이블과 매우 비슷해 보일 것입니다. 예를 들어, 각각 10개의 셀이 있는 3개의 숫자 배열을 저장하는 배열을 만들고 싶습니다 int. 다음과 같이 표시됩니다. Java의 배열에 관한 것 - 4각 줄은 숫자 배열을 나타냅니다 int. 첫 번째 배열에는 1에서 10까지의 숫자가 포함되고, 두 번째 배열에는 -1에서 -10까지, 세 번째 배열에는 난수 집합이 포함됩니다. 이러한 각 배열은 2차원 배열의 셀에 저장됩니다. 코드에서 2차원 배열을 초기화하는 방법은 다음과 같습니다.
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
우리의 2차원 고양이 배열은 각각 5개의 셀로 구성된 3개의 배열을 저장합니다. 두 번째 배열의 세 번째 셀에 객체를 넣으려면 다음과 같이 합니다.
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluff");
}
[1]두 번째 배열을 가리키고 [2]이 배열의 세 번째 셀을 가리킵니다. 2차원 배열은 여러 개의 배열로 구성되어 있으므로 이를 탐색하고 모든 값을 콘솔에 인쇄하려면(또는 모든 셀을 채우려면) 이중 중첩 루프가 필요합니다.
for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
외부 루프(변수 i)에서는 2차원 배열을 구성하는 모든 배열을 차례로 순회합니다. 내부 루프(변수 j)에서는 각 배열의 모든 셀을 반복합니다. 결과적으로 cats[0][0]콘솔에는 객체(첫 번째 배열, 첫 번째 셀)가 먼저 표시되고 두 번째 객체는 cats[0][1](첫 번째 배열, 두 번째 셀)이 됩니다. 첫 번째 배열이 소진되면 , cats[1][0]cats[1][1]cats[1][2]출력됩니다. 그런데 2차원 배열에도 빠른 초기화가 가능합니다.
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
numbers일반적으로 2차원 배열을 로 작성 int[3][3]하지만 이 방법을 사용하면 값을 즉시 지정할 수 있습니다. 2차원 배열이 필요한 이유는 무엇입니까? 예를 들어, 이 도구를 사용하면 유명한 게임 "Battleship"을 쉽게 재현할 수 있습니다. Java의 배열에 관한 것 - 5"Battleship"의 경기장 구조는 쉽게 설명할 수 있는 것과 같습니다. 10개의 어레이, 각각 10개의 셀로 구성된 2차원 배열입니다. . 자신과 상대방을 위해 두 개의 배열을 만듭니다.
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
*선박이 위치한 셀에 몇 가지 값(예: 숫자 또는 기호)을 입력한 다음 귀하와 상대방이 교대로 셀 번호를 호출합니다.
  • 바다전투[6][5]!
  • 과거! 씨배틀2[6][6]!
  • 다쳐서!
  • 씨배틀2[6][7]!
  • 다쳐서!
  • seaBattle2[6][8]!,
  • 살해당했습니다!

배열에 대한 추가 리소스

배열에 대해 더 알고 싶으십니까? 아래 기사들을 살펴보시기 바랍니다. 이 주제에 대한 흥미롭고 유용한 정보가 많이 있습니다.
  1. Arrays in Java - 배열, 배열 생성, 초기화 및 사용에 대한 자세한 기사입니다. 예를 들어.
  2. Arrays 클래스 및 그 사용 - 이 문서에서는 클래스의 일부 메서드를 설명합니다.Array
  3. Arrays는 배열에 관한 최초의 JavaRush 강의 입니다 .
  4. 다차원 배열 - 예제와 함께 다차원 배열에 대한 자세한 기사입니다.
  5. null이 아닌 길이가 0인 배열 반환 - 효과적인 프로그래밍 작성자인 Joshua Bloch가 빈 배열을 더 효과적으로 반환하는 방법에 대해 이야기합니다.
이것으로 배열에 대한 첫 번째 소개는 끝났지만 이는 배열과의 상호 작용의 시작일 뿐입니다. 다음 강의에서는 이를 사용하는 흥미로운 방법을 살펴보고 이 데이터 구조를 보다 편리하게 사용하기 위해 Java에 내장된 기능이 무엇인지 알아봅니다. :)
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION