개발 관련 부가 지식/자바, 스프링
Java ArrayList 구현
Developer-Choi
2023. 3. 2. 19:32
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
👏
👏