배열을 이용한 리스트 구현
code
import java.util.NoSuchElementException;
public class ArrayList{
static class List<E> {
private E a[]; // 리스트의 항목들을 저장할 배열
private int size; // 리스트의 항목 수
// 생성자
public List() {
a = (E[]) new Object[1]; // 최초로 1개의 원소를 가진 배열 생성
size = 0; // 항목 수를 0으로 초기화
}
// 리스트가 empty이면 true 리턴
public boolean isEmpty() {
return size == 0;
}
// 가장 뒤에 새 항목 삽입
public void insertLast(E newItem) {
if (size == a.length) // 배열에 빈 공간이 없으면
resize(2 * a.length); // 배열 크기 2배로 확장
a[size++] = newItem; // 새 항목 삽입
}
// 새 항목을 k-1번쨰 항목 다음에 삽입
public void insert(E newItem, int k) {
if (size == a.length) // 배열에 빈 공간이 없으면
resize(2 * a.length); // 배열 크기 2배로 확장
// 한 칸씩 뒤로 이동
for (int i = size - 1; i >= k; i--)
a[i + 1] = a[i];
a[k] = newItem;
size++;
}
// k번째 항목 삭제
public E delete(int k) {
// underflow 경우에 프로그램 정지
if (isEmpty())
throw new NoSuchElementException();
E item = a[k];
// 한 칸씩 앞으로 이동
for (int i = k; i < size; i++)
a[i] = a[i + 1];
size--;
if (size > 0 && size == a.length / 4) // 배열에 항목들이 1/4만 차지한다면
resize(a.length / 2); // 배열을 1/2 크기로 축소
return item;
}
// k번째 항목을 리턴, 단순히 읽기만 한다.
public E peek(int k) {
// underflow 경우에 프로그램 정지
if (isEmpty())
throw new NoSuchElementException();
return a[k];
}
// 배열 크기 조절
private void resize(int newSize) {
Object[] t = new Object[newSize]; // newSize 크기의 새로운 배열 t 생성
for (int i = 0; i < size; i++)
t[i] = a[i]; // 배열 s를 배열 t로 복사
a = (E[]) t; // 배열 t를 배열 s로
}
// 배열의 항목들을 출력
public void print() {
if (isEmpty())
System.out.print("배열이 비어있음.");
else
for (int i = 0; i < a.length; i++)
System.out.print(a[i] + "\t ");
System.out.println();
}
}
public static void main(String[] args) {
// TO-DO
}
}
Reference
『IT CookBook, 자바로 배우는 쉬운 자료구조』, 이지영 집필, 한빛아카데미(2008)
'Data Structure' 카테고리의 다른 글
# 자료구조 개요 (0) | 2020.03.10 |
---|---|
[Data Structure] 그래프(Graph) (0) | 2019.11.09 |