Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixed #1516

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open

fixed #1516

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
70 changes: 61 additions & 9 deletions src/main/java/core/basesyntax/ArrayList.java
Original file line number Diff line number Diff line change
@@ -1,48 +1,100 @@
package core.basesyntax;

import java.util.NoSuchElementException;

public class ArrayList<T> implements List<T> {
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();
}
Comment on lines +17 to +19

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (size == elementData.length) {
grow();
}
grow();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can add this inside method grow

elementData[size] = value;
size++;
}

@Override
public void add(T value, int index) {

if (index < 0 || index > size) {
throw new ArrayListIndexOutOfBoundsException("Invalid index: " + index);
}
Comment on lines +26 to +28

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can extract this check to private method

if (size == elementData.length) {
grow();
}
System.arraycopy(elementData, index, elementData, index + 1, size - index);
elementData[index] = value;
size++;
}

@Override
public void addAll(List<T> list) {

for (int i = 0; i < list.size(); i++) {
add(list.get(i));
}
}

@Override
public T get(int index) {
return null;
checkIndex(index);
return elementData[index];
}

@Override
public void set(T value, int index) {

checkIndex(index);
elementData[index] = value;
}

@Override
public T remove(int index) {
return null;
if (index >= 0 && index < size) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the same. just call checkIndex method

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fix comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use here method that you have already

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);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
throw new ArrayListIndexOutOfBoundsException("Invalid index: " + index);

}

@Override
public T remove(T element) {
return null;
for (int i = 0; i < elementData.length; i++) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The loop should iterate only up to size instead of elementData.length to avoid unnecessary checks and potential errors.

if (elementData[i] == element
|| 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);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The calculation for newCapacity should ensure that it is at least one more than the current capacity to prevent an infinite loop when size is zero.

T[] newElementData = (T[]) new Object[newCapacity];
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 ");
}
}
}