From 443b109de7345e266ee943327245c11886c2aa8d Mon Sep 17 00:00:00 2001 From: Liza Date: Sun, 24 Nov 2024 17:10:01 +0400 Subject: [PATCH 1/3] fixed --- src/main/java/core/basesyntax/ArrayList.java | 75 +++++++++++++++++--- 1 file changed, 66 insertions(+), 9 deletions(-) diff --git a/src/main/java/core/basesyntax/ArrayList.java b/src/main/java/core/basesyntax/ArrayList.java index 8d6477943..811dea180 100644 --- a/src/main/java/core/basesyntax/ArrayList.java +++ b/src/main/java/core/basesyntax/ArrayList.java @@ -1,48 +1,105 @@ package core.basesyntax; +import java.util.NoSuchElementException; + public class ArrayList implements List { + private static final int DEFAULT_CAPACITY = 10; + private static final double GROW_INDEX = 1.5; + private T[] elementData; + private int size; + + public ArrayList() { + this.elementData = (T[]) new Object[DEFAULT_CAPACITY]; + } + @Override public void add(T value) { - + if (size == elementData.length) { + grow(); + } + elementData[size] = value; + size++; } @Override public void add(T value, int index) { - + if (index < 0 || index > size) { + throw new ArrayListIndexOutOfBoundsException("Invalid index: " + index); + } + if (size == elementData.length) { + grow(); + } + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = value; + size++; } @Override public void addAll(List list) { - + int newSize = size + list.size(); + if (newSize > elementData.length) { + grow(); + } + for (int i = 0; i < list.size(); i++) { + add(list.get(i)); + } } @Override public T get(int index) { - return null; + if (index >= 0 && index < size) { + return elementData[index]; + } + throw new ArrayListIndexOutOfBoundsException("Index: " + index + ", is invalid "); } @Override public void set(T value, int index) { - + if (index >= 0 && index < size) { + elementData[index] = value; + } else { + throw new ArrayListIndexOutOfBoundsException("Index: " + index + ", is invalid "); + } } @Override public T remove(int index) { - return null; + if (index >= 0 && index < size) { + T deleteValue = elementData[index]; + System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); + elementData[--size] = null; + return deleteValue; + } + throw new ArrayListIndexOutOfBoundsException("Invalid index: " + index); } @Override public T remove(T element) { - return null; + for (int i = 0; i < elementData.length; i++) { + if (elementData[i] == null && element == null) { + return remove(i); + } + if (elementData[i] != null && elementData[i].equals(element)) { + return remove(i); + } + } + throw new NoSuchElementException("Element: " + element + " not found"); } @Override public int size() { - return 0; + return size; } @Override public boolean isEmpty() { - return false; + return size == 0; + } + + private void grow() { + int newCapacity = (int)(size * GROW_INDEX); + T[] newElementData = (T[]) new Object[newCapacity]; + System.arraycopy(elementData, 0, newElementData, 0, size); + elementData = newElementData; } } From bf502c094e8512efe5737af348894ca8fd7f75cc Mon Sep 17 00:00:00 2001 From: Liza Date: Tue, 26 Nov 2024 11:12:19 +0400 Subject: [PATCH 2/3] fixed --- src/main/java/core/basesyntax/ArrayList.java | 29 ++++++++------------ 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/src/main/java/core/basesyntax/ArrayList.java b/src/main/java/core/basesyntax/ArrayList.java index 811dea180..1a9d1b012 100644 --- a/src/main/java/core/basesyntax/ArrayList.java +++ b/src/main/java/core/basesyntax/ArrayList.java @@ -36,10 +36,6 @@ public void add(T value, int index) { @Override public void addAll(List list) { - int newSize = size + list.size(); - if (newSize > elementData.length) { - grow(); - } for (int i = 0; i < list.size(); i++) { add(list.get(i)); } @@ -47,19 +43,14 @@ public void addAll(List list) { @Override public T get(int index) { - if (index >= 0 && index < size) { - return elementData[index]; - } - throw new ArrayListIndexOutOfBoundsException("Index: " + index + ", is invalid "); + checkIndex(index); + return elementData[index]; } @Override public void set(T value, int index) { - if (index >= 0 && index < size) { - elementData[index] = value; - } else { - throw new ArrayListIndexOutOfBoundsException("Index: " + index + ", is invalid "); - } + checkIndex(index); + elementData[index] = value; } @Override @@ -76,10 +67,8 @@ public T remove(int index) { @Override public T remove(T element) { for (int i = 0; i < elementData.length; i++) { - if (elementData[i] == null && element == null) { - return remove(i); - } - if (elementData[i] != null && elementData[i].equals(element)) { + if ((elementData[i] == null && element == null) + || (elementData[i] != null && elementData[i].equals(element))) { return remove(i); } } @@ -102,4 +91,10 @@ private void grow() { System.arraycopy(elementData, 0, newElementData, 0, size); elementData = newElementData; } + + private void checkIndex(int index) { + if (index < 0 || index >= size) { + throw new ArrayListIndexOutOfBoundsException("Index: " + index + ", is invalid "); + } + } } From a550f90be45ebb713fd23e7ab001a201a1fb6198 Mon Sep 17 00:00:00 2001 From: Liza Date: Tue, 26 Nov 2024 13:14:59 +0400 Subject: [PATCH 3/3] fixed --- src/main/java/core/basesyntax/ArrayList.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/core/basesyntax/ArrayList.java b/src/main/java/core/basesyntax/ArrayList.java index 1a9d1b012..14fff5ba5 100644 --- a/src/main/java/core/basesyntax/ArrayList.java +++ b/src/main/java/core/basesyntax/ArrayList.java @@ -67,8 +67,8 @@ public T remove(int index) { @Override public T remove(T element) { for (int i = 0; i < elementData.length; i++) { - if ((elementData[i] == null && element == null) - || (elementData[i] != null && elementData[i].equals(element))) { + if (elementData[i] == element + || elementData[i] != null && elementData[i].equals(element)) { return remove(i); } }