-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
Overridden ArrayList methods #1211
base: master
Are you sure you want to change the base?
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,48 +1,109 @@ | ||||||||||||||||||||||||||||||||||||||||||
package core.basesyntax; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
import java.util.NoSuchElementException; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
public class ArrayList<T> implements List<T> { | ||||||||||||||||||||||||||||||||||||||||||
private static final int DEFAULT_CAPACITY = 10; | ||||||||||||||||||||||||||||||||||||||||||
private int size; | ||||||||||||||||||||||||||||||||||||||||||
private T[] elementData; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
public ArrayList() { | ||||||||||||||||||||||||||||||||||||||||||
this.elementData = (T[]) new Object[DEFAULT_CAPACITY]; | ||||||||||||||||||||||||||||||||||||||||||
this.size = 0; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
public void indexValidator(int index) { | ||||||||||||||||||||||||||||||||||||||||||
if (index < 0 || index >= size) { | ||||||||||||||||||||||||||||||||||||||||||
throw new ArrayListIndexOutOfBoundsException("Index is not valid"); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this method is not expected to be used outside this class, so make private.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
public Object[] grow(T[] elementData, int size) { | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Method grow should be void, because it changes the main array, e.g. this.elementData.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
if ((size + 1) >= elementData.length) { | ||||||||||||||||||||||||||||||||||||||||||
int newCapacity = elementData.length + (elementData.length >> 1); | ||||||||||||||||||||||||||||||||||||||||||
T[] newElementData = (T[]) new Object[newCapacity]; | ||||||||||||||||||||||||||||||||||||||||||
System.arraycopy(elementData, 0, newElementData, 0, size); | ||||||||||||||||||||||||||||||||||||||||||
elementData = newElementData; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
return elementData; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Think about proper access modifier for grow method. |
||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
@Override | ||||||||||||||||||||||||||||||||||||||||||
public void add(T value) { | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
elementData = (T[]) grow(elementData, size); | ||||||||||||||||||||||||||||||||||||||||||
elementData[size] = value; | ||||||||||||||||||||||||||||||||||||||||||
size++; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
@Override | ||||||||||||||||||||||||||||||||||||||||||
public void add(T value, int index) { | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
if (index < 0 || index > size) { | ||||||||||||||||||||||||||||||||||||||||||
throw new ArrayListIndexOutOfBoundsException("Index is not valid"); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Potentially repeating code should be extracted into private method.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
if (size == elementData.length) { | ||||||||||||||||||||||||||||||||||||||||||
elementData = (T[]) grow(elementData, size); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
for (int i = size; i > index; i--) { | ||||||||||||||||||||||||||||||||||||||||||
elementData[i] = elementData[i - 1]; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||||||||||||||||||||||||||||||||||||||||||
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; | ||||||||||||||||||||||||||||||||||||||||||
indexValidator(index); | ||||||||||||||||||||||||||||||||||||||||||
return elementData[index]; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
@Override | ||||||||||||||||||||||||||||||||||||||||||
public void set(T value, int index) { | ||||||||||||||||||||||||||||||||||||||||||
indexValidator(index); | ||||||||||||||||||||||||||||||||||||||||||
elementData[index] = value; | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
@Override | ||||||||||||||||||||||||||||||||||||||||||
public T remove(int index) { | ||||||||||||||||||||||||||||||||||||||||||
return null; | ||||||||||||||||||||||||||||||||||||||||||
indexValidator(index); | ||||||||||||||||||||||||||||||||||||||||||
T removedValue = elementData[index]; | ||||||||||||||||||||||||||||||||||||||||||
System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); | ||||||||||||||||||||||||||||||||||||||||||
size--; | ||||||||||||||||||||||||||||||||||||||||||
return removedValue; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
@Override | ||||||||||||||||||||||||||||||||||||||||||
public T remove(T element) { | ||||||||||||||||||||||||||||||||||||||||||
return null; | ||||||||||||||||||||||||||||||||||||||||||
if (element == null) { | ||||||||||||||||||||||||||||||||||||||||||
for (int i = 0; i < size; i++) { | ||||||||||||||||||||||||||||||||||||||||||
if (elementData[i] == null) { | ||||||||||||||||||||||||||||||||||||||||||
return remove(i); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||
for (int i = 0; i < size; i++) { | ||||||||||||||||||||||||||||||||||||||||||
if (element.equals(elementData[i])) { | ||||||||||||||||||||||||||||||||||||||||||
return remove(i); | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
throw new NoSuchElementException("Element not found"); | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can be more simple
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
@Override | ||||||||||||||||||||||||||||||||||||||||||
public int size() { | ||||||||||||||||||||||||||||||||||||||||||
return 0; | ||||||||||||||||||||||||||||||||||||||||||
return size; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
@Override | ||||||||||||||||||||||||||||||||||||||||||
public boolean isEmpty() { | ||||||||||||||||||||||||||||||||||||||||||
return false; | ||||||||||||||||||||||||||||||||||||||||||
return size == 0; | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You dont need to set size=0, because java makes the same instead of you.