logo

Java의 배열

Java에서 배열은 동일한 유형의 여러 값을 저장할 수 있는 중요한 선형 데이터 구조입니다.

라제쉬 칸나
  • Java의 배열은 Java 배열의 다른 모든 객체와 마찬가지로 java.lang.Object 클래스에서 암시적으로 상속되는 객체입니다. 이를 통해 Object에 정의된 메서드(예: toString() equals() 및 hashCode())를 호출할 수 있습니다.
  • 배열에는 배열의 요소 수를 제공하는 내장된 길이 속성이 있습니다.
Java
public class Geeks {  public static void main(String[] args)  {  // initializing array  int[] arr = {40 55 63 17 22};  // size of array  int n = arr.length;  // traversing array  for (int i = 0; i < n; i++)  System.out.print(arr[i] + ' ');  } } 

산출
40 55 63 17 22 

어레이의 주요 기능

  • 기본 요소 및 객체 저장: Java 배열은 기본 유형(int char boolean 등)과 객체(String Integer 등)를 모두 보유할 수 있습니다.
  • 연속 메모리 할당 기본 유형의 배열을 사용할 때 요소는 인접한 위치에 저장됩니다. 비기본 유형의 경우 항목 참조는 인접한 위치에 저장됩니다.
  • 0 기반 인덱싱: 배열의 첫 번째 요소는 인덱스 0에 있습니다.
  • 고정 길이: 배열을 생성한 후에는 크기가 고정됩니다. 우리는 그것을 바꿀 수 없습니다.
원시_배열_' title=Java의 기본 배열 표현 업데이트 배열 요소' loading='lazy' title=Java의 비기본 배열 표현

Java 배열의 기본 작업

1. 배열 선언

배열 선언의 일반적인 형식은 다음과 같습니다. 

// 방법 1:
int arr[];



// 방법 2:
int[] arr;

요소 유형은 배열을 구성하는 각 요소의 데이터 유형을 결정합니다. 정수 배열과 마찬가지로 char float double 등과 같은 다른 기본 데이터 유형이나 사용자 정의 데이터 유형(클래스의 객체)의 배열을 만들 수도 있습니다.

메모: 우리가 만들 수 있는 방법은 실제 배열이 존재하지 않는 배열 변수입니다. 단지 이 변수(int Array)가 정수 유형의 배열을 보유할 것임을 컴파일러에 알릴 뿐입니다.

2. Java에서 배열 초기화

배열이 선언되면 배열의 참조만 생성됩니다. 주어진 크기의 배열을 할당하기 위해 new를 사용합니다.

int arr[] = 새로운 int[크기];

  • 배열 선언은 일반적으로 정적이지만 크기가 정의되지 않은 경우 배열의 크기는 동적으로 지정됩니다.
  • 배열용 메모리는 Java에서 항상 (힙 세그먼트에) 동적으로 할당됩니다. 이는 메모리를 정적으로 할당하거나 동적으로 할당할 수 있는 C/C++와 다릅니다.
  • new에 의해 할당된 배열의 요소는 자동으로 0(숫자 유형의 경우), false(부울의 경우) 또는 null(참조 유형의 경우)로 초기화됩니다.

Java의 배열 리터럴

배열의 크기와 배열의 변수가 이미 알려진 상황에서는 배열 리터럴을 사용할 수 있습니다. 

// 배열 리터럴 선언
int[] arr = 새로운 int[]{ 12345678910 };

  • 이 배열의 길이는 생성된 배열의 길이를 결정합니다.
  • 최신 버전의 Java에서는 새로운 int[] 부분을 작성할 필요가 없습니다.

3. 배열 요소 변경

요소를 변경하려면 특정 색인에 새 값을 할당하십시오. 인덱스는 0으로 시작하고 (총 배열 크기)-1로 끝납니다.

트래버스 배열' loading='lazy' title=

// 첫 번째 요소를 90으로 변경
도착[0] = 90;

4. 배열 길이

length 속성을 사용하여 배열의 길이를 얻을 수 있습니다.

//배열의 길이 구하기
int n = arr.length;

5. 모든 배열 요소 액세스 및 업데이트

  • 배열의 모든 요소는 Java for Loop를 사용하여 액세스할 수 있습니다.
  • 배열의 각 요소는 해당 인덱스를 통해 액세스됩니다.
산출' loading='lazy' title=모든 배열 요소 액세스 및 업데이트

정수 배열 생성을 설명하는 Java 프로그램은 배열에 일부 값을 넣고 각 값을 표준 출력으로 인쇄합니다.

Java
class Geeks {  public static void main(String[] args)  {  // declares an Array of integers.  int[] arr;  // allocating memory for 5 integers.  arr = new int[5];  // initialize the elements of the array  // first to last(fifth) element  arr[0] = 2;  arr[1] = 4;  arr[2] = 8;  arr[3] = 12;  arr[4] = 16;  // 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 : 2 Element at index 1 : 4 Element at index 2 : 8 Element at index 3 : 12 Element at index 4 : 16 

Java의 객체 배열

객체의 배열은 원시형 데이터 항목의 배열처럼 생성됩니다.

: 여기서는 학생 수업을 듣고 배열에 저장된 5개의 Student 객체가 있는 Student 배열을 생성합니다. Student 개체는 Student 클래스의 생성자를 사용하여 인스턴스화되어야 하며 해당 참조는 배열 요소에 할당되어야 합니다.

Java
class Student {  public int roll_no;  public String name;    Student(int roll_no String name){  this.roll_no = roll_no;  this.name = name;  } } public class Geeks {  public static void main(String[] args){    // declares an Array of Student  Student[] arr;  // allocating memory for 5 objects of type Student.  arr = new Student[5];  // initialize the elements of the array  arr[0] = new Student(1 'aman');  arr[1] = new Student(2 'vaibhav');  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 } 

배열 크기를 벗어나는 요소에 액세스하려고 하면 어떻게 되나요?

JVM은 배열이 잘못된 인덱스로 액세스되었음을 나타내기 위해 ArrayIndexOutOfBoundsException을 발생시킵니다. 인덱스는 음수이거나 배열 크기보다 크거나 같습니다.

아래 코드는 배열 크기를 벗어난 요소에 액세스하려고 하면 어떤 일이 발생하는지 보여줍니다.

Java
public class Geeks {  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]);  } } 

산출:

' loading='lazy' title=배열 크기를 벗어난 요소 출력

메서드에 배열 전달

변수와 마찬가지로 배열을 메서드에 전달할 수도 있습니다. 예를 들어 아래 프로그램은 배열 값의 합계를 계산하기 위해 배열을 sum 메소드에 전달합니다.

예:

Java
public class Geeks {  // 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 

설명

  • 이 Java 프로그램은 배열을 메소드에 전달하는 방법을 보여줍니다.
  • 정수 배열 arr이 기본 메소드에서 선언되고 초기화됩니다.
  • sum() 메서드는 arr을 인수로 사용하여 호출됩니다.
  • sum() 메소드 내에서 모든 배열 요소는 for 루프를 사용하여 추가됩니다.
  • 그런 다음 최종 합계가 콘솔에 인쇄됩니다.

메소드에서 배열 반환

평소와 같이 메서드는 배열을 반환할 수도 있습니다. 예를 들어 아래 프로그램은 m1 메서드에서 배열을 반환합니다. 

예:

Java
class Geeks {  // 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 

Java 배열의 장점

  • 효율적인 액세스: 인덱스로 요소에 액세스하는 것은 빠르며 일정한 시간 복잡도 O(1)을 갖습니다.
  • 메모리 관리: 어레이는 고정된 크기를 가지므로 메모리 관리가 간단하고 예측 가능합니다.
  • 데이터 구성: 배열은 데이터를 구조화된 방식으로 구성하여 관련 요소를 더 쉽게 관리할 수 있도록 도와줍니다.

Java 배열의 단점

  • 고정 크기: 배열이 생성되면 크기를 변경할 수 없으므로 크기가 과대평가되면 메모리 낭비가 발생하고 과소평가되면 저장 공간이 부족해질 수 있습니다.
  • 유형 균질성: 배열은 동일한 데이터 유형의 요소만 저장할 수 있으므로 혼합된 유형의 데이터에 대한 추가 처리가 필요할 수 있습니다.
  • 삽입 및 삭제: 특히 배열 중간에 요소를 삽입하거나 삭제하면 요소를 이동해야 할 수 있으므로 비용이 많이 들 수 있습니다.

관련 게시물

  • Java의 가변 배열
  • Java의 For-each 루프
  • Java의 배열 클래스