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 1/2] [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인_데이터_모두_삭제() { // 구현 후 수정 From 947fc4d28871f5fa55f3ecc2accfb35c0f855319 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, 2 Jun 2024 07:47:46 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[LinkedList]:=20LinkedList=5FJAEKWANG97=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LinkedList/LinkedList_JAEKWANG97.java | 95 +++++++++++++++++++ .../List/LinkedList/LinkedListFactory.java | 4 +- .../List/LinkedList/LinkedListTest_name.java | 6 +- 3 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 src/main/java/List/LinkedList/LinkedList_JAEKWANG97.java diff --git a/src/main/java/List/LinkedList/LinkedList_JAEKWANG97.java b/src/main/java/List/LinkedList/LinkedList_JAEKWANG97.java new file mode 100644 index 0000000..1d3a7e3 --- /dev/null +++ b/src/main/java/List/LinkedList/LinkedList_JAEKWANG97.java @@ -0,0 +1,95 @@ +package List.LinkedList; + +import List.List; + +public class LinkedList_JAEKWANG97 implements List { + + static class Node { + E data; + Node next; + Node prev; + + public Node(E data) { + this.data = data; + this.next = null; + this.prev = null; + } + } + + private Node head; + private Node tail; + private int size; + + public LinkedList_JAEKWANG97() { + this.head = null; + this.tail = null; + this.size = 0; + } + + @Override + public void insert(E data) { + Node newNode = new Node<>(data); + if (head == null) { + head = newNode; + tail = newNode; + } else { + tail.next = newNode; + newNode.prev = tail; + tail = newNode; + } + size++; + } + + @Override + public int size() { + return size; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public boolean contains(E o) { + if (isEmpty()) { + return false; + } + Node cur = head; + while (cur != null) { + if (cur.data == o) { + return true; + } + cur = cur.next; + } + + return false; + } + + @Override + public E get(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(); + } + Node cur = head; + for (int i = 0; i < index; i++) { + cur = cur.next; + } + return cur.data; + } + + @Override + public E remove(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(); + } + Node cur = head; + for (int i = 0; i < index; i++) { + cur = cur.next; + } + cur.prev.next = cur.next; + cur.next.prev = cur.prev; + size--; + return cur.data; + } +} diff --git a/src/test/java/List/LinkedList/LinkedListFactory.java b/src/test/java/List/LinkedList/LinkedListFactory.java index 9a7df60..8e4a776 100644 --- a/src/test/java/List/LinkedList/LinkedListFactory.java +++ b/src/test/java/List/LinkedList/LinkedListFactory.java @@ -20,8 +20,8 @@ public List createList(ID id) { try { return (List) Class.forName(clazz.getCanonicalName()).getDeclaredConstructor().newInstance(); - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | InvocationTargetException | - NoSuchMethodException e) { + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | InvocationTargetException + | NoSuchMethodException e) { throw new RuntimeException(e); } } diff --git a/src/test/java/List/LinkedList/LinkedListTest_name.java b/src/test/java/List/LinkedList/LinkedListTest_name.java index b273837..3daa4d1 100644 --- a/src/test/java/List/LinkedList/LinkedListTest_name.java +++ b/src/test/java/List/LinkedList/LinkedListTest_name.java @@ -1,5 +1,6 @@ package List.LinkedList; +import static id.ID.JAEKWANG97; import static id.ID.name; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -14,8 +15,8 @@ public class LinkedListTest_name { @BeforeEach void init() { - //깃허브 아이디 입력하면 각자 만든 리스트 객체 생성 - list = factory.createList(name); + // 깃허브 아이디 입력하면 각자 만든 리스트 객체 생성 + list = factory.createList(JAEKWANG97); } @Test @@ -39,7 +40,6 @@ void init() { assertThat(list.get(4)).isEqualTo(33); } - @Test void 데이터_5개_저장_후_22인_데이터_모두_삭제() { list.insert(11);