From 151fa1cfccd71cd4e69c201cb77b46aea3c354e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=9E=AC=EA=B4=91?= <65598179+JAEKWANG97@users.noreply.github.com> Date: Sun, 19 May 2024 23:55:04 +0900 Subject: [PATCH] [ArrayList]: isEmpty, get, insert, remove, size, grow, contains --- .../List/ArrayList/ArrayList_JAEKWANG97.java | 73 +++++++++++++++++++ .../ArrayList/ArrayListTest_JAEKWANG97.java | 61 ++++++++++++++++ .../List/ArrayList/ArrayListTest_name.java | 1 - 3 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 src/main/java/List/ArrayList/ArrayList_JAEKWANG97.java create mode 100644 src/test/java/List/ArrayList/ArrayListTest_JAEKWANG97.java diff --git a/src/main/java/List/ArrayList/ArrayList_JAEKWANG97.java b/src/main/java/List/ArrayList/ArrayList_JAEKWANG97.java new file mode 100644 index 0000000..e621449 --- /dev/null +++ b/src/main/java/List/ArrayList/ArrayList_JAEKWANG97.java @@ -0,0 +1,73 @@ +package List.ArrayList; + +import List.List; + +public class ArrayList_JAEKWANG97 implements List { + private static final int DEFAULT_CAPACITY = 10; + private int size; + private Object[] elementData; + + public ArrayList_JAEKWANG97() { + this.size = 0; + this.elementData = new Object[DEFAULT_CAPACITY]; + } + + @Override + public boolean contains(Object o) { + for (int i = 0; i < size; i++) { + if (elementData[i].equals(o)) { + return true; + } + } + return false; + } + + @SuppressWarnings("unchecked") + @Override + public E get(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(); + } + return (E) elementData[index]; + } + + @Override + public void insert(Object data) { + elementData[size] = data; + size++; + + if (size == elementData.length) { + grow(); + } + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @SuppressWarnings("unchecked") + @Override + public E remove(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(); + } + E removedElement = (E) elementData[index]; + System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); + size--; + return removedElement; + } + + @Override + public int size() { + return size; + } + + private void grow() { + int newCapacity = elementData.length * 2; + Object[] newElementData = new Object[newCapacity]; + System.arraycopy(elementData, 0, newElementData, 0, elementData.length); + elementData = newElementData; + } + +} diff --git a/src/test/java/List/ArrayList/ArrayListTest_JAEKWANG97.java b/src/test/java/List/ArrayList/ArrayListTest_JAEKWANG97.java new file mode 100644 index 0000000..0d3bb3c --- /dev/null +++ b/src/test/java/List/ArrayList/ArrayListTest_JAEKWANG97.java @@ -0,0 +1,61 @@ +package List.ArrayList; + +import List.List; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class ArrayListTest_JAEKWANG97 { + + @Test + void ArrayList의_생성_및_초기화() { + // 구현 후 수정 + List list = new ArrayList_JAEKWANG97(); + + assertThat(list).isNotNull(); + } + + @Test + void 데이터_5개_저장() { + // 구현 후 수정 + List list = new ArrayList_name(); + + 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_name(); + + 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); + } +} \ No newline at end of file diff --git a/src/test/java/List/ArrayList/ArrayListTest_name.java b/src/test/java/List/ArrayList/ArrayListTest_name.java index fc87e3e..263c6af 100644 --- a/src/test/java/List/ArrayList/ArrayListTest_name.java +++ b/src/test/java/List/ArrayList/ArrayListTest_name.java @@ -34,7 +34,6 @@ public class ArrayListTest_name { assertThat(list.get(4)).isEqualTo(33); } - @Test void 데이터_5개_저장_후_22인_데이터_모두_삭제() { // 구현 후 수정