본문 바로가기

개발 관련 부가 지식/자바, 스프링

Java ArrayList 구현

728x90
728x90

자바의 Array는 다른 언어와는 달리 크기를 넣어서 생성하게 되어있다. (따라서 한번 생성하고 나면 크기가 정해짐🤷‍♂️)

ArrayList 는? 자바가 제공해주는 라이브러리로, 데이터 추가에 따라 배열의 크기가 늘어난다. ✔

 

Doubling이란? ArrayList배열이 다 차게 되면 배열을 2배로 늘리고, 기존 데이터를 복사해 오는데 이러한 작업을 더블링이라고 한다.

 

참고✨ 

ArrayList 는 입력 시간, 검색 시간이 O(1) 이다.

 

ArrayList를 java로 구현해 보았다.

public class MyArrayList {
	private Object[] data; //배열의 object
    private int size; //배열의 사이즈
    private int index; //다음 데이터를 추가할지 판단
    
    public MyArrayList() {
    	this.size = 1; //생성 시 배열 사이즈는 1
        this.data = new Object[this.size]; //배열의 사이즈로 생성
        this.index = 0; //새로 들어올 data는 0번 방부터
    }
    
    public void add(Object object) {
    	if(this.index == this.size -1) {
        	doubling();
        }
        data[this.index] = object;
        this.index++;
    }
    
    private void doubling() {
    	this.size = this.size * 2;
        Object[] newData = new Object[this.size];
        for (int i = 0; i < data.length; i++) {
        	newData[i] = data[i];
        }
        this.data = newData;
        
        //더블링 진행 여부 확인, 필요시 주석 해제
        //System.out.println("doubling index: " + this.index + ", size: " + this.size + " data size: " + this.size);
    }
    
    public Object get(int i) throws Exception {
    	if (i > this.index -1) {
        	throw new Exception("ArrayIndexOutOfBound");
        } else if (i < 0) {
        	throw new Exception("negetive Value");
        }
        return this.data[i];
    }
    
    public void remove(int i) throws Exception {
    	if (i > this.index -1) {
        	throw new Exception("ArrayIndexOutOfBound");
        } else if (i < 0) {
        	throw new Exception("negetive Value");
        }
        //삭제할 데이터 뒷 부분을 한 칸씩 쉬프트
        for (int x = i; x <this.data.length -1; x++) {
        	data[x] = data[x + 1];
        }
        this.index--;
    }
}

class MyarrayListTest {
	public static void main(String[] args) throws Exception {
    	MyArrayList al = new MyArrayList();
        al.add("0");
        al.add("1");
        al.add("2");
        al.add("3");
        al.add("4");
        al.add("5");
        al.add("6");
        System.out.println(al.get(5));
        al.remove(5);
        System.out.println(al.get(5));
    }
}

//출력결과
//5
//6

👏

👏