[Java] 배열(Array)

rara_kim·2022년 7월 23일
0

자료구조/알고리즘

목록 보기
8/10
post-thumbnail

배열(Array)

  • 배열은 많은 수의 데이터를 다룰 때 사용하는 자료구조이다.
  • 동일한 데이터 타입을 순서에 따라 관리하는 자료구조이다.
  • 정해진 크기가 있다.
  • 각 데이터를 인덱스와 1:1 대응하도록 구성된다.
  • 데이터가 메모리 상에 연속적으로 저장된다.
  • 요소의 추가와 제거시 다른 요소들의 이동이 필요하다.
  • jdk클래스: ArrayList, Vector

배열의 장점

인덱스를 이용하여 데이터에 빠르게 접근 가능하다.

데이터'a''b''c''d''e'
인덱스01234

위와 같은 배열(arr)이 존재한다고 할때, 인덱스를 이용하며 데이터에 바로 접근이 가능하다.

arr[0] = 'a'
arr[1] = 'b'
arr[2] = 'c'
arr[3] = 'd'
arr[4] = 'e'

배열의 단점

데이터의 추가, 삭제가 번거롭다.

  • 미리 최대 길이를 정해서 생성해야 한다.
  • 가변 길이 배열은 배열의 크기를 변경할 때마다 새로운 배열을 생성한다.
  • 데이터 삭제시, 인덱스를 유지하기 위해 빈 공간을 유지한다.
  • 새로운 데이터를 추가 할 때, 메모리를 새로 생성하여 복사를 진행한다.

배열 구현하기

class MyArray{

	int[] arr;
    
    //배열의 초기 사이즈 설정
    MyArray(int size) {
    	this.arr = new int[size];
    }
    
    
    //데이터 추가
    public void addData(int index, int data) {
    	if(index < 0 || index > this.arr.length) {
        	System.out.println("Index Error");
        }
        
        int[] arrDup = this.arr.clone();           //기존 배열의 복사
        this.arr = new int[this.arr.length + 1];   //새로운 사이즈의 배열 생성
        
        for(int i = 0; i < index; i++) {
        	this.arr[i] = arrDup[i];
        }
        
        for(int i = index + 1; i < this.arr.length; i++) {
        	this.arr[i] = arrDup[i - 1];
        }
        
        this.arr[index] = data;
    }
   

	//데이터 삭제
    public void removeData(int data) {
		int targetIdx = - 1;
        
        for(int i = 0; i < this.arr.length; i++) {
        	if(this.arr[i] == data) {
            	targetIdx = i;
                break;
            }
        }
        
        if(targetIdx == - 1) {
        	System.out.println("Data not found");
        } else {
            int[] arrDup = this.arr.clone();
            this.arr = new int[this.arr.length - 1];

            for(int i = 0; i < targetIdx; i++) {
                this.arr[i] = arrDup[i];
            }

            for(int i = targetIdx; i < this.arr.length; i++) {
                this.arr[i] = arrDup[i + 1];
            }
        }
    }
}

profile
느리더라도 꾸준하게

0개의 댓글