Update DynamicArray.java
parent
9eba905fc0
commit
9a98ed3770
|
|
@ -1,16 +1,22 @@
|
||||||
package com.nbee.solution.practice;
|
package com.nbee.solution.practice;
|
||||||
|
|
||||||
public class DynamicArray {
|
import java.util.Arrays;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
|
public class DynamicArray implements Iterable<Integer> {
|
||||||
private int size = 0;
|
private int size = 0;
|
||||||
private int capacity = 8;
|
private int capacity = 8;
|
||||||
private int[] array = new int[capacity];
|
private int[] array = {};
|
||||||
|
|
||||||
public void addList(int element) {
|
public void addList(int element) {
|
||||||
add(size, element);
|
add(size, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(int index, int element) {
|
public void add(int index, int element) {
|
||||||
if (index < 0 || index > size){
|
checkAndGrow();
|
||||||
|
if (index < 0 || index > size) {
|
||||||
throw new IndexOutOfBoundsException();
|
throw new IndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
if (index >= 0 && index < size) {
|
if (index >= 0 && index < size) {
|
||||||
|
|
@ -20,14 +26,66 @@ public class DynamicArray {
|
||||||
size++;
|
size++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkAndGrow() {
|
||||||
|
if (size == 0) {
|
||||||
|
array = new int[capacity];
|
||||||
|
} else if (size == capacity) {
|
||||||
|
capacity = capacity + (capacity >>> 1);
|
||||||
|
int[] newArray = new int[capacity];
|
||||||
|
System.arraycopy(array, 0, newArray, 0, size);
|
||||||
|
array = newArray;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int get(int index) {
|
public int get(int index) {
|
||||||
if (index < 0 || index >= size){
|
if (index < 0 || index >= size) {
|
||||||
throw new IndexOutOfBoundsException();
|
throw new IndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
return array[index];
|
return array[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void forEach0(Consumer<Integer> consumer) {
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
consumer.accept(array[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<Integer> iterator() {
|
||||||
|
return new Iterator<Integer>() {
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
return i < size;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer next() {
|
||||||
|
return array[i++];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntStream stream() {
|
||||||
|
return IntStream.of(Arrays.copyOfRange(array, 0, size));
|
||||||
|
}
|
||||||
|
|
||||||
|
public int remove(int index) {
|
||||||
|
int removed = array[index];
|
||||||
|
if (index < size - 1) {
|
||||||
|
System.arraycopy(array, index + 1, array, index, size - index - 1);
|
||||||
|
size--;
|
||||||
|
}
|
||||||
|
return removed;
|
||||||
|
}
|
||||||
|
public String toString() {
|
||||||
|
return Arrays.toString(Arrays.copyOfRange(array, 0, size));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue