diff --git a/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/array_list/ArrayList.java b/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/array_list/ArrayList.java index e7a3f1551..416ea8ad2 100644 --- a/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/array_list/ArrayList.java +++ b/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/array_list/ArrayList.java @@ -12,7 +12,7 @@ */ public class ArrayList implements List { - public static final int DEFAULT_CAPACITY = 5; + private static final int DEFAULT_CAPACITY = 5; private Object[] elementData; private int size; @@ -53,7 +53,7 @@ public static List of(T... elements) { } /** - * Adds an element to the array and returns index of position. + * Adds an element to the array. * * @param element element to add */ @@ -65,8 +65,8 @@ public void add(T element) { } private void increaseDataArrayIfFull() { - if (elementData.length <= size) { - elementData = getTrimmedArrayToSize(elementData.length * 2); + if (elementData.length == size) { + elementData = Arrays.copyOf(elementData, size * 2); } } @@ -146,15 +146,16 @@ public void set(int index, T element) { * throws {@link IndexOutOfBoundsException} * * @param index element index + * @return deleted element */ @Override - public void remove(int index) { - if (index == size - 1) { - elementData = getTrimmedArrayToSize(size - 1); - } else { - System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); - } + @SuppressWarnings("unchecked") + public T remove(int index) { + Objects.checkIndex(index, size); + T deletedElement = (T) elementData[index]; + System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); size--; + return deletedElement; } /** diff --git a/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/linked_list/LinkedList.java b/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/linked_list/LinkedList.java index f44843f4d..5243abfb8 100644 --- a/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/linked_list/LinkedList.java +++ b/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/linked_list/LinkedList.java @@ -155,21 +155,25 @@ private void checkElementsExist() { * throws {@link IndexOutOfBoundsException} * * @param index element index - * @return an element value + * @return deleted element */ @Override - public void remove(int index) { + public T remove(int index) { + T deletedElement = null; if (index == 0) { Objects.checkIndex(index, size); + deletedElement = head.value; removeHead(); } else { Node previousNode = findNodeByIndex(index - 1); + deletedElement = previousNode.next.value; previousNode.next = previousNode.next.next; if (index == size - 1) { tail = previousNode; } } size--; + return deletedElement; } private void removeHead() { diff --git a/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/linked_list/List.java b/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/linked_list/List.java index 9c03dfc61..fe7d485d5 100644 --- a/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/linked_list/List.java +++ b/2-0-data-structures-and-algorithms/src/main/java/com/bobocode/linked_list/List.java @@ -14,7 +14,7 @@ public interface List { E getLast(); - void remove(int index); + E remove(int index); boolean contains(E element); diff --git a/2-0-data-structures-and-algorithms/src/test/java/com/bobocode/array_list/ArrayListTest.java b/2-0-data-structures-and-algorithms/src/test/java/com/bobocode/array_list/ArrayListTest.java index 420de3b3b..e185d753d 100644 --- a/2-0-data-structures-and-algorithms/src/test/java/com/bobocode/array_list/ArrayListTest.java +++ b/2-0-data-structures-and-algorithms/src/test/java/com/bobocode/array_list/ArrayListTest.java @@ -253,11 +253,12 @@ public void setFirstElementOnEmptyTree() { public void removeElementByIndex() { arrayList = ArrayList.of(15, 69, 58, 78, 100); - arrayList.remove(2); + int removedElement = arrayList.remove(2); assertThat(arrayList.get(2)).isEqualTo(78); assertThat(arrayList.get(1)).isEqualTo(69); assertThat(arrayList.size()).isEqualTo(4); + assertThat(removedElement).isEqualTo(58); } @Test @@ -274,10 +275,11 @@ public void removeElementByIndexEqualToSize() { public void removeLastElementByIndex() { arrayList = ArrayList.of(15, 69, 58, 78, 100); - arrayList.remove(4); + int removedElement = arrayList.remove(4); assertThat(arrayList.get(3)).isEqualTo(78); assertThat(arrayList.size()).isEqualTo(4); + assertThat(removedElement).isEqualTo(100); assertThatExceptionOfType(IndexOutOfBoundsException.class) .isThrownBy(() -> arrayList.get(4)); } diff --git a/2-0-data-structures-and-algorithms/src/test/java/com/bobocode/linked_list/LinkedListTest.java b/2-0-data-structures-and-algorithms/src/test/java/com/bobocode/linked_list/LinkedListTest.java index f374b0b34..8c138cd1d 100644 --- a/2-0-data-structures-and-algorithms/src/test/java/com/bobocode/linked_list/LinkedListTest.java +++ b/2-0-data-structures-and-algorithms/src/test/java/com/bobocode/linked_list/LinkedListTest.java @@ -8,10 +8,7 @@ import java.util.NoSuchElementException; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class LinkedListTest { @@ -76,7 +73,9 @@ void testGetLastElement() { @Test @Order(7) - void testGetFirstOfEmptyList() { assertThrows(NoSuchElementException.class, () -> intList.getFirst()); } + void testGetFirstOfEmptyList() { + assertThrows(NoSuchElementException.class, () -> intList.getFirst()); + } @Test @Order(8) @@ -202,7 +201,6 @@ void testSetElementByIndex() { assertEquals(78, intList.get(1).intValue()); assertEquals(8, intList.get(3).intValue()); assertEquals(4, intList.size()); - } @Test @@ -235,10 +233,11 @@ void testRemoveElementFromEmptyList() { void testRemoveFirstElement() { intList = LinkedList.of(4, 6, 8, 9); - intList.remove(0); + int deletedElement = intList.remove(0); assertEquals(6, intList.get(0).intValue()); assertEquals(3, intList.size()); + assertEquals(4, deletedElement); } @Test @@ -246,10 +245,11 @@ void testRemoveFirstElement() { void testRemoveLastElement() { intList = LinkedList.of(4, 6, 8, 9); - intList.remove(intList.size() - 1); + int deletedElement = intList.remove(intList.size() - 1); assertEquals(8, intList.get(intList.size() - 1).intValue()); assertEquals(3, intList.size()); + assertEquals(9, deletedElement); } @Test @@ -258,10 +258,11 @@ void testRemoveElement() { intList = LinkedList.of(1, 2, 3, 4, 5); int elementIndex = 2; - intList.remove(elementIndex); // element = 3 + int deletedElement = intList.remove(elementIndex); // element = 3 assertEquals(4, intList.get(elementIndex).intValue()); assertEquals(4, intList.size()); + assertEquals(3, deletedElement); } @Test