자바에서는 배열 공통 이름으로 참조되는 유사한 유형의 변수 그룹입니다. Java의 배열은 C/C++의 배열과 다르게 작동합니다. 다음은 Java 배열에 관한 몇 가지 중요한 사항입니다.
Java의 배열
- Java에서는 모든 배열이 동적으로 할당됩니다. (아래에서 논의)
- 배열은 연속 메모리[연속 메모리 위치]에 저장될 수 있습니다.
- 배열은 Java의 객체이므로 객체 속성을 사용하여 길이를 찾을 수 있습니다. 길이 . 이는 sizeof를 사용하여 길이를 찾는 C/C++와 다릅니다.
- Java 배열 변수는 데이터 유형 뒤에 []를 사용하여 다른 변수처럼 선언할 수도 있습니다.
- 배열의 변수는 순서가 지정되어 있으며 각 변수에는 0으로 시작하는 인덱스가 있습니다.
- Java 배열은 정적 필드, 지역 변수 또는 메소드 매개변수로 사용될 수도 있습니다.
배열에는 배열 정의에 따라 클래스의 기본 형식(int, char 등)과 개체(또는 기본이 아닌) 참조가 포함될 수 있습니다. 기본 데이터 유형의 경우 실제 값은 연속적인 메모리 위치에 저장될 수 있습니다(JVM은 이 동작을 보장하지 않습니다). 클래스 객체의 경우, 실제 객체는 힙 세그먼트에 저장됩니다. .
단어 줄바꿈 CSS

메모: 이러한 배열 저장은 배열의 요소에 무작위로 액세스하는 데 도움이 됩니다 [임의 액세스 지원].
배열 생성, 초기화 및 액세스
1차원 배열
1차원 배열 선언의 일반적인 형식은 다음과 같습니다.
-- type var-name[]; -- type[] var-name;>
배열 선언에는 유형과 이름이라는 두 가지 구성 요소가 있습니다. 유형 배열의 요소 유형을 선언합니다. 요소 유형은 배열을 구성하는 각 요소의 데이터 유형을 결정합니다. 정수 배열과 마찬가지로 char, float, double 등과 같은 다른 기본 데이터 유형이나 사용자 정의 데이터 유형(클래스의 객체)의 배열을 만들 수도 있습니다. 따라서 배열의 요소 유형에 따라 배열이 보유할 데이터 유형이 결정됩니다.
예:
// both are valid declarations int intArray[]; int[] intArray; // similar to int we can declare // byte , short, boolean, long, float // double, char // an array of references to objects of // the class MyClass (a class created by user) MyClass myClassArray[]; // array of Object Object[] ao, // array of Collection // of unknown type Collection[] ca;>
첫 번째 선언에서는 int Array가 배열 변수임을 설정하지만 실제 배열이 존재하지 않습니다 . 단지 이 변수(int Array)가 정수 유형의 배열을 보유할 것임을 컴파일러에 알릴 뿐입니다. int 배열을 실제 정수 배열과 연결하려면 다음을 사용하여 하나를 할당해야 합니다. 새로운 int 배열에 할당합니다.
Java에서 배열 인스턴스화
배열이 선언되면 배열의 참조만 생성됩니다. 배열에 메모리를 생성하거나 제공하려면 다음과 같은 배열을 생성합니다. 새로운 1차원 배열에 적용하면 다음과 같이 나타납니다.
var-name = new type [size];>
여기, 유형 할당되는 데이터 유형을 지정합니다. 크기 배열의 요소 수를 결정하고 변수 이름 배열에 연결된 배열 변수의 이름입니다. 사용 새로운 배열을 할당하려면 할당할 요소의 유형과 수를 지정해야 합니다.
예:
//declaring array int intArray[]; // allocating memory to array intArray = new int[20]; // combining both statements in one int[] intArray = new int[20];>
메모: 할당된 배열의 요소 새로운 자동으로 초기화됩니다 영 (숫자 유형의 경우) 거짓 (부울의 경우) 또는 없는 (참조 유형의 경우) 참고하세요 Java의 기본 배열 값 .
배열을 구하는 과정은 2단계 과정입니다. 먼저 원하는 배열 유형의 변수를 선언해야 합니다. 둘째, new를 사용하여 배열을 보관할 메모리를 할당하고 이를 배열 변수에 할당해야 합니다. 따라서, 자바에서 , 모든 배열은 동적으로 할당됩니다.
Java의 배열 리터럴
배열의 크기와 배열의 변수가 이미 알려진 상황에서는 배열 리터럴을 사용할 수 있습니다.
// Declaring array literal int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9,10 };>- 이 배열의 길이는 생성된 배열의 길이를 결정합니다.
- 최신 버전의 Java에서는 새로운 int[] 부분을 작성할 필요가 없습니다.
for 루프를 사용하여 Java 배열 요소에 액세스
배열의 각 요소는 해당 인덱스를 통해 액세스됩니다. 인덱스는 0으로 시작하고 (총 배열 크기)-1로 끝납니다. 배열의 모든 요소는 Java for Loop를 사용하여 액세스할 수 있습니다.
// accessing the elements of the specified array for (int i = 0; i>
구현:
자바 // Java program to illustrate creating an array // of integers, puts some values in the array, // and prints each value to standard output. class GFG { public static void main(String[] args) { // declares an Array of integers. int[] arr; // allocating memory for 5 integers. arr = new int[5]; // initialize the first elements of the array arr[0] = 10; // initialize the second elements of the array arr[1] = 20; // so on... arr[2] = 30; arr[3] = 40; arr[4] = 50; // accessing the elements of the specified array for (int i = 0; i < arr.length; i++) System.out.println('Element at index ' + i + ' : ' + arr[i]); } }> 산출
Element at index 0 : 10 Element at index 1 : 20 Element at index 2 : 30 Element at index 3 : 40 Element at index 4 : 50>
위 방법의 복잡성:
시간 복잡도: O(n)
보조 공간: O(1)
다음을 사용하여 Java 배열에 액세스할 수도 있습니다. 각 루프마다 .
네트워크 유형

Java의 객체 배열
객체의 배열은 기본형 데이터 항목의 배열과 마찬가지로 다음과 같은 방법으로 생성됩니다.
Student[] arr = new Student[5]; //student is a user-defined class>
통사론:
-- data type[] arrName; -- datatype arrName[]; -- datatype [] arrName;>
객체 배열의 예
예시 1:
다음은 위에서 언급한 주제의 구현입니다.
자바 import java.io.*; class GFG { public static void main (String[] args) { int [] arr=new int [4]; // 4 is the size of arr System.out.println('Array Size:'+arr.length); } }> 산출
Array Size:4>
학생 배열은 학생 객체의 주소를 저장할 수 있는 학생 클래스 크기의 메모리 공간 5개를 포함합니다. Student 개체는 Student 클래스의 생성자를 사용하여 인스턴스화되어야 하며 해당 참조는 다음과 같은 방법으로 배열 요소에 할당되어야 합니다.
예 2:
다음은 위에서 언급한 주제의 구현입니다.
자바 // Java program to illustrate creating // an array of objects class Student { public int roll_no; public String name; Student(int roll_no, String name) { this.roll_no = roll_no; this.name = name; } } // Elements of the array are objects of a class Student. public class GFG { public static void main(String[] args) { // declares an Array of Students Student[] arr; // allocating memory for 5 objects of type Student. arr = new Student[5]; // initialize the first elements of the array arr[0] = new Student(1, 'aman'); // initialize the second elements of the array arr[1] = new Student(2, 'vaibhav'); // so on... arr[2] = new Student(3, 'shikar'); arr[3] = new Student(4, 'dharmesh'); arr[4] = new Student(5, 'mohit'); // accessing the elements of the specified array for (int i = 0; i < arr.length; i++) System.out.println('Element at ' + i + ' : ' + arr[i].roll_no + ' ' + arr[i].name); } }> 산출
Element at 0 : 1 aman Element at 1 : 2 vaibhav Element at 2 : 3 shikar Element at 3 : 4 dharmesh Element at 4 : 5 mohit>
위 방법의 복잡성:
시간 복잡도: O(n)
보조공간 : O(1)
실시예 3
객체 배열도 다음과 같이 생성됩니다.
자바 // Java program to illustrate creating // an array of objects class Student { public String name; Student(String name) { this.name = name; } @Override public String toString(){ return name; } } // Elements of the array are objects of a class Student. public class GFG { public static void main (String[] args) { // declares an Array and initializing the elements of the array Student[] myStudents = new Student[]{new Student('Dharma'),new Student('sanvi'),new Student('Rupa'),new Student('Ajay')}; // accessing the elements of the specified array for(Student m:myStudents){ System.out.println(m); } } }> 산출
Dharma sanvi Rupa Ajay>
배열 크기를 벗어나는 요소에 액세스하려고 하면 어떻게 되나요?
JVM이 던집니다. ArrayIndexOutOfBoundsException 배열이 잘못된 인덱스로 액세스되었음을 나타냅니다. 인덱스는 음수이거나 배열 크기보다 크거나 같습니다.
아래 코드는 배열 크기를 벗어난 요소에 액세스하려고 하면 어떤 일이 발생하는지 보여줍니다.
자바 // Code for showing error 'ArrayIndexOutOfBoundsException' public class GFG { public static void main(String[] args) { int[] arr = new int[4]; arr[0] = 10; arr[1] = 20; arr[2] = 30; arr[3] = 40; System.out.println( 'Trying to access element outside the size of array'); System.out.println(arr[5]); } }> 산출
Trying to access element outside the size of array Exception in thread 'main' java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 4 at GFG.main(GFG.java:13)>
예(배열 반복):
자바 public class GFG { public static void main(String[] args) { int[] arr = new int[2]; arr[0] = 10; arr[1] = 20; for (int i = 0; i < arr.length; i++) System.out.println(arr[i]); } }> 산출
10 20>
위 방법의 복잡성:
시간 복잡도: O(n), 여기서 n은 배열의 크기입니다.
보조 공간: O(1) , 추가 공간이 필요하지 않기 때문입니다.노트북 키보드의 삽입 키는 어디에 있나요?
Java의 다차원 배열
다차원 배열은 배열의 배열 배열의 각 요소는 다른 배열의 참조를 보유합니다. 이들은 또한로 알려져 있습니다 들쭉날쭉한 배열 . 다차원 배열은 차원당 하나의 대괄호([]) 세트를 추가하여 생성됩니다.
Java 다차원 배열의 구문
아래와 같이 Java 다차원 배열을 선언하는 방법에는 두 가지가 있습니다.
-- datatype [][] arrayrefvariable; -- datatype arrayrefvariable[][];>
예:
자바 // Java Program to demonstrate // Java Multidimensional Array import java.io.*; // Driver class class GFG { public static void main(String[] args) { // Syntax int[][] arr = new int[3][3]; // 3 row and 3 column // Number of Rows System.out.println('Number of Rows:'+ arr.length); // Number of Columns System.out.println('Number of Columns:'+ arr[0].length); } }> 산출
Number of Rows:3 Number of Columns:3>

다차원 배열 선언
int[][] intArray = new int[10][20]; //a 2D array or matrix int[][][] intArray = new int[10][20][10]; //a 3D array>
Java의 다차원 배열 예
예시 1:
위 메소드를 구현하면 다음과 같습니다.
자바 // Java Program to Multidimensional Array // Driver Class public class multiDimensional { // main function public static void main(String args[]) { // declaring and initializing 2D array int arr[][] = { { 2, 7, 9 }, { 3, 6, 1 }, { 7, 4, 2 } }; // printing 2D array for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) System.out.print(arr[i][j] + ' '); System.out.println(); } } }> 산출
2 7 9 3 6 1 7 4 2>
메서드에 배열 전달
변수와 마찬가지로 배열을 메서드에 전달할 수도 있습니다. 예를 들어, 아래 프로그램은 배열을 메소드에 전달합니다. 합집합 배열 값의 합을 계산합니다.
자바 // Java program to demonstrate // passing of array to method public class Test { // Driver method public static void main(String args[]) { int arr[] = { 3, 1, 2, 5, 4 }; // passing array to method m1 sum(arr); } public static void sum(int[] arr) { // getting sum of array values int sum = 0; for (int i = 0; i < arr.length; i++) sum += arr[i]; System.out.println('sum of array values : ' + sum); } }> 산출
sum of array values : 15>
위 방법의 복잡성:
시간 복잡도: 에)
보조 공간 : 오(1)
메소드에서 배열 반환
평소와 같이 메서드는 배열을 반환할 수도 있습니다. 예를 들어, 아래 프로그램은 메소드에서 배열을 반환합니다. m1 .
자바 // Java program to demonstrate // return of array from method class Test { // Driver method public static void main(String args[]) { int arr[] = m1(); for (int i = 0; i < arr.length; i++) System.out.print(arr[i] + ' '); } public static int[] m1() { // returning array return new int[] { 1, 2, 3 }; } }> 산출
1 2 3>
위 방법의 복잡성:
시간 복잡도: O(n)
보조공간 : O(1)
배열의 클래스 객체
모든 배열에는 동일한 구성 요소 유형을 가진 다른 모든 배열과 공유되는 연관된 Class 개체가 있습니다.
자바 // Java program to demonstrate // Class Objects for Arrays class Test { public static void main(String args[]) { int intArray[] = new int[3]; byte byteArray[] = new byte[3]; short shortsArray[] = new short[3]; // array of Strings String[] strArray = new String[3]; System.out.println(intArray.getClass()); System.out.println( intArray.getClass().getSuperclass()); System.out.println(byteArray.getClass()); System.out.println(shortsArray.getClass()); System.out.println(strArray.getClass()); } }> 산출
class [I class java.lang.Object class [B class [S class [Ljava.lang.String;>
위 방법에 대한 설명:
- 문자열 [I는 구성 요소 유형이 포함된 클래스 객체 배열의 런타임 유형 서명입니다. 정수 .
- 배열 유형의 유일한 직접 슈퍼클래스는 다음과 같습니다. java.lang.Object .
- 문자열 [B는 구성 요소 유형이 포함된 클래스 객체 배열의 런타임 유형 서명입니다. 바이트 .
- 문자열 [S는 구성 요소 유형이 있는 클래스 객체 배열의 런타임 유형 서명입니다. 짧은 .
- 문자열 [L은 클래스 구성요소 유형을 갖는 클래스 객체 배열의 런타임 유형 서명입니다. 그런 다음 클래스 이름을 따릅니다.
Java 배열 구성원
이제 아시다시피 배열은 클래스의 객체이고 배열의 직접적인 슈퍼클래스는 클래스 Object입니다. 배열 유형의 멤버는 모두 다음과 같습니다.
- 공개 최종 필드 길이 배열의 구성 요소 수를 포함합니다. 길이는 양수이거나 0일 수 있습니다.
- 모든 멤버는 Object 클래스에서 상속됩니다. 상속되지 않은 Object의 유일한 메소드는 클론 방법.
- 공개 방법 클론() Object 클래스의 clone 메소드를 재정의하고 no를 발생시킵니다. 확인된 예외 .
배열 유형 및 허용되는 요소 유형
| 배열 유형 | 허용되는 요소 유형 |
|---|---|
| 기본 유형 배열 | 선언된 유형으로 암시적으로 승격될 수 있는 모든 유형입니다. |
| 객체 유형 배열 | 선언된 유형 객체이거나 하위 클래스 객체입니다. |
| 추상 클래스 유형 배열 | 해당 하위 클래스 개체가 허용됩니다. |
| 인터페이스 유형 배열 | 구현 클래스 객체가 허용됩니다. |
Java에서 1차원 배열 복제
Object[]와 같은 1차원 배열을 복제하면 참조가 아닌 원본 배열 요소의 복사본이 포함된 새 배열을 사용하여 전체 복사가 수행됩니다.
터보 C++ 다운로드
위 메소드를 구현하면 다음과 같습니다.
자바 // Java program to demonstrate // cloning of one-dimensional arrays class Test { public static void main(String args[]) { int intArray[] = { 1, 2, 3 }; int cloneArray[] = intArray.clone(); // will print false as deep copy is created // for one-dimensional array System.out.println(intArray == cloneArray); for (int i = 0; i < cloneArray.length; i++) { System.out.print(cloneArray[i] + ' '); } } }> 산출
false 1 2 3>

Java에서 다차원 배열 복제하기
다차원 배열의 복제(예: Object[][])는 얕은 복사본입니다. 즉, 각 요소 배열이 원래 요소 배열에 대한 참조인 단일 새 배열만 생성하지만 하위 배열은 공유.
자바 // Java program to demonstrate // cloning of multi-dimensional arrays class Test { public static void main(String args[]) { int intArray[][] = { { 1, 2, 3 }, { 4, 5 } }; int cloneArray[][] = intArray.clone(); // will print false System.out.println(intArray == cloneArray); // will print true as shallow copy is created // i.e. sub-arrays are shared System.out.println(intArray[0] == cloneArray[0]); System.out.println(intArray[1] == cloneArray[1]); } }> 산출
false true true>

Java 배열에 대해 자주 묻는 질문
1. 배열의 크기를 얼마든지 지정할 수 있나요?
아니요, 배열의 크기를 길게 지정할 수는 없지만 int 또는 short로 지정할 수는 있습니다.
2. Java에서 배열의 직접적인 슈퍼클래스는 무엇입니까?
안 물체 Java 배열의 직접 슈퍼클래스입니다.
3. Java의 배열은 어떤 인터페이스를 구현합니까?
모든 배열 유형은 Cloneable 및 java.io.직렬화 가능 .
4. 배열의 크기를 변경할 수 있나요?
배열의 크기는 변경할 수 없습니다(초기화되면). 그러나 다른 배열을 가리키도록 배열 참조를 만들 수 있습니다.
주제와 관련된 기사
- Java의 가변 배열
- Java의 For-each 루프
- Java의 배열 클래스