diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..7d3b3e8 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..de0c428 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/List/ArrayList/ArrayList_enduf7686.java b/src/main/java/List/ArrayList/ArrayList_enduf7686.java new file mode 100644 index 0000000..fd4f555 --- /dev/null +++ b/src/main/java/List/ArrayList/ArrayList_enduf7686.java @@ -0,0 +1,74 @@ +package List.ArrayList; + +import static java.lang.System.arraycopy; + +import List.List; + +public class ArrayList_enduf7686 implements List { + + private static final int DEFAULT_INIT_SIZE = 10; + + private Object[] array; + private int size; + + public ArrayList_enduf7686() { + this(DEFAULT_INIT_SIZE); + } + + public ArrayList_enduf7686(int initSize) { + this.array = new Object[initSize]; + this.size = 0; + } + + @Override + public void insert(E data) { + array[size++] = data; + + if (array.length == size) { + Object[] temp = array.clone(); + + array = new Object[size + DEFAULT_INIT_SIZE]; + arraycopy(temp, 0, array, 0, temp.length); + } + } + + @Override + public int size() { + return size; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public boolean contains(E o) { + for (int i = 0; i <= size; i++) { + if (o.equals(array[i])) { + return true; + } + } + + return false; + } + + @Override + @SuppressWarnings("unchecked") + public E get(int index) { + return (E) array[index]; + } + + @Override + @SuppressWarnings("unchecked") + public E remove(int index) { + E temp = (E) array[index]; + + for (int idx = index + 1; idx < array.length; idx++) { + array[idx - 1] = array[idx]; + } + array[--size] = null; + + return temp; + } +} diff --git a/src/test/java/List/ArrayList/ArrayListTest_enduf7686.java b/src/test/java/List/ArrayList/ArrayListTest_enduf7686.java new file mode 100644 index 0000000..4f8951f --- /dev/null +++ b/src/test/java/List/ArrayList/ArrayListTest_enduf7686.java @@ -0,0 +1,104 @@ +package List.ArrayList; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import List.List; +import org.junit.jupiter.api.Test; + +public class ArrayListTest_enduf7686 { + + @Test + void ArrayList의_생성_및_초기화() { + // 구현 후 수정 + List list = new ArrayList_enduf7686<>(); + + assertThat(list).isNotNull(); + } + + @Test + void 데이터_5개_저장() { + // 구현 후 수정 + List list = new ArrayList_enduf7686(); + + list.insert(11); + list.insert(11); + list.insert(22); + list.insert(22); + list.insert(33); + + assertThat(list.size()).isEqualTo(5); + assertThat(list.get(0)).isEqualTo(11); + assertThat(list.get(1)).isEqualTo(11); + assertThat(list.get(2)).isEqualTo(22); + assertThat(list.get(3)).isEqualTo(22); + assertThat(list.get(4)).isEqualTo(33); + } + + + @Test + void 데이터_5개_저장_후_22인_데이터_모두_삭제() { + // 구현 후 수정 + List list = new ArrayList_enduf7686(); + + list.insert(11); + list.insert(11); + list.insert(22); + list.insert(22); + list.insert(33); + + // Iterable을 구현하면 enhanced for loop를 사용할 수 있습니다. + for (int i = 0; i < list.size(); i++) { + if (list.get(i) == 22) { + list.remove(i); + i--; // 삭제되면 index가 조정되므로 해당 index부터 다시 확인해야 합니다. + } + } + + assertThat(list.size()).isEqualTo(3); + assertThat(list.get(0)).isEqualTo(11); + assertThat(list.get(1)).isEqualTo(11); + assertThat(list.get(2)).isEqualTo(33); + } + + @Test + void 데이터_5개_저장_후_데이터_확인() { + // 구현 후 수정 + List list = new ArrayList_enduf7686(); + + list.insert(11); + list.insert(11); + list.insert(22); + list.insert(22); + list.insert(33); + + assertThat(list.contains(11)).isEqualTo(true); + assertThat(list.contains(12)).isEqualTo(false); + assertThat(list.contains(22)).isEqualTo(true); + assertThat(list.contains(33)).isEqualTo(true); + assertThat(list.contains(34)).isEqualTo(false); + } + + @Test + void 데이터_15개_저장_후_데이터_확인() { + // 구현 후 수정 + List list = new ArrayList_enduf7686(); + + list.insert(11); + list.insert(11); + list.insert(22); + list.insert(22); + list.insert(33); + list.insert(33); + list.insert(44); + list.insert(44); + list.insert(44); + list.insert(55); + list.insert(55); + list.insert(55); + list.insert(66); + list.insert(77); + list.insert(88); + + assertThat(list.size()).isEqualTo(15); + } +} \ No newline at end of file