JAVA 배열을 이용한 자료의 관리

 

자료구조란 특정 큐칙을 적용한 자료의 집합을 의미한다. 자료구조 중에서 가장 기본이 되며 가장 단순한 구조인 배열은 동일한 형태(int, double, String, Object 등)의 자료들이 순서를 가지고 구성된 집합이다.

 

배열은 초기 생성시에 그 크기를 미리 지정해야 한다. 초기에 지정한 크기는 바꿀 수 없기 때문에 생성한 크기보다 많은 자료를 저장할 수 없어 효율적인 자료구조로 사용하는데 제약이 따르게 된다.

 

배열 내에 저장된 자료들은 그 위치 값(index)을 가지고 식별할 수 있으며 위치값은 자료의 절대적인 위치를 나타내므로 특정 데이터에 접근 할 경우 처음부터 탐색할 필요 없이 index를 가지고 직접 접근할 수 있다.



 

 

 

 

 

1. 배열의 선언, 생성 및 초기화

    String[] arr;

   

위와 같이 String을 담을 배열을 선언한다. 선언만으로는 저장할 자료의 타입만 지정이 되며 실제 메모리에 공간이 할당되지는 않는다.

    arr = new String[10];


      
new 키워드를 이용하여 배열을 생성한다. 배열을 생성할 때는 위와 같이 배열의 크기를 지정해야 한다.

 

이차원 또는 다차원 배열 선언시에는 항상 정방형 구조로만 만들 수 있는건 아니다.

 

   int[][] arr;
    arr = new int[3][];
    arr[0] = new int[5];
    arr[1] = new int[10];
    arr[2] = new int[8];



위의 이차원 배열은 3행을 생성한 후 각 행을 5, 10, 8 열로 각각 다른 크기로 배열을 생성했다.

 

배열을 생성하면 각 요소는 생성한 데이터 타입의 초기값으로 초기화된다.

정수형 데이터 타입은 0으로, 실수형 데이터 타입은 0.0 이나 0.0f로 초기화 되며 boolean 타입은 false 값으로 초기화된다. char 타입은 '' 로 초기화 되며 String과 같은 객체를 참조하는 경우 null 값으로 초기화 된다.

 

 

 

 

 

 

 

 

2. 배열의 자료 관리 (삽입, 검색, 삭제)

(1) 자료의 삽입

배열에 값을 삽입하기 위해서는 마지막에 삽입된 인덱스의 다음 인덱스를 이용하여 삽입 할 자료를 대입한다.

 

    int[] arr = new int[30];
    int  size = 0;


    for(int i=0; i<arr.length; i++){
        arr[i] = i+1;

        size++;
    }

 

 

arr.length 는 배열의 크기를 반환하므로 위에서는 항상 30을 반환한다. 따라서 실제 사용하는 데이터의 크기를 저장하고 있으려면 size 변수로 데이터의 크기를 항상 가지고 있어야 한다.

 

 

(2) 자료의 검색

배열 내의 데이터를 검색할 경우 자료의 중복이 없을 경우 배열의 처음부터 순차적으로 비교하여 매칭되는 데이터가 있을 경우 비교작업을 중지해도 되며, 중복이 있을 경우는 모든 요소를 순차적으로 비교하는 작업을 해야 한다.

 

    int searchKey = 5;
    for(int i=0; i<size; i++){
        if(arr[i] == searchKey){
            System.out.println(i + "번째에 " + searchKey + " 을 찾았다.");
            break;
        }
    }

 

배열에 자료가 중복 저장이 없을 경우 자료를 찾은 후 더 이상 배열을 탐색할 필요가 없으므로, break; 로 for 문을 빠져나온다. 중복 자료가 있어 모든 배열을 찾아야 하는 경우 break; 를 제거하면 된다.

 

 

(3) 자료의 삭제

삭제도 검색과 마찬가지로 중복이 없으면, 삭제할 데이터를 찾아 삭제 후 더이상 비교 작업을 하지 않도록 break; 를 사용하면 된다.

데이터를 삭제하는 작업 삭제할 데이터의 인덱스 이후의 값들을 앞으로 한칸씩 밀어주고 배열의 크기를 하나 감소시키면 된다.

 

   int deleteKey =5;
   for(int i=0; i<size; i++){
       if(arr[i]==deleteKey){
           for(int k=i; k<size-1; k++){
              arr[k] = arr[k+1];
            }
        size --;
        break;
        }
   }

 

배열을 앞에서 부터 탐색하면서 deleteKey 를 찾는다. 

deleteKey 를 찾으면 삭제 후 뒤의 데이터를 앞으로 한칸씩 밀어주기 위해 for 문으로 뒤의 데이터를 앞의 열로 대입시키고 배열의 크기(size) 를 감소시킨다. 중복된 데이터가 없다면 break; 로 탐색을 중지하며, 데이터 중복이 있다면 break 를 제거하여 배열 전체를 탐색하면 된다.