Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions src/main/java/List/ArrayList/ArrayList_JAEKWANG97.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package List.ArrayList;

import List.List;

public class ArrayList_JAEKWANG97<E> implements List<E> {
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;
}

}
95 changes: 95 additions & 0 deletions src/main/java/List/LinkedList/LinkedList_JAEKWANG97.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package List.LinkedList;

import List.List;

public class LinkedList_JAEKWANG97<E> implements List<E> {

static class Node<E> {
E data;
Node<E> next;
Node<E> prev;

public Node(E data) {
this.data = data;
this.next = null;
this.prev = null;
}
}

private Node<E> head;
private Node<E> tail;
private int size;

public LinkedList_JAEKWANG97() {
this.head = null;
this.tail = null;
this.size = 0;
}

@Override
public void insert(E data) {
Node<E> 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<E> 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<E> 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<E> 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;
}
}
61 changes: 61 additions & 0 deletions src/test/java/List/ArrayList/ArrayListTest_JAEKWANG97.java
Original file line number Diff line number Diff line change
@@ -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<Integer> list = new ArrayList_JAEKWANG97<Integer>();

assertThat(list).isNotNull();
}

@Test
void 데이터_5개_저장() {
// 구현 후 수정
List<Integer> list = new ArrayList_name<Integer>();

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<Integer> list = new ArrayList_name<Integer>();

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);
}
}
1 change: 0 additions & 1 deletion src/test/java/List/ArrayList/ArrayListTest_name.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ public class ArrayListTest_name {
assertThat(list.get(4)).isEqualTo(33);
}


@Test
void 데이터_5개_저장_후_22인_데이터_모두_삭제() {
// 구현 후 수정
Expand Down
4 changes: 2 additions & 2 deletions src/test/java/List/LinkedList/LinkedListFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ public List<E> createList(ID id) {

try {
return (List<E>) Class.forName(clazz.getCanonicalName()).getDeclaredConstructor().newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | InvocationTargetException |
NoSuchMethodException e) {
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | InvocationTargetException
| NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/test/java/List/LinkedList/LinkedListTest_name.java
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -14,8 +15,8 @@ public class LinkedListTest_name {

@BeforeEach
void init() {
//깃허브 아이디 입력하면 각자 만든 리스트 객체 생성
list = factory.createList(name);
// 깃허브 아이디 입력하면 각자 만든 리스트 객체 생성
list = factory.createList(JAEKWANG97);
}

@Test
Expand All @@ -39,7 +40,6 @@ void init() {
assertThat(list.get(4)).isEqualTo(33);
}


@Test
void 데이터_5개_저장_후_22인_데이터_모두_삭제() {
list.insert(11);
Expand Down