动态数组的增删改
新增:
private Boolean add(int index,int element){
if(index < 0 || index > size){
return false;
}
System.arraycopy(array,index,array,index+1,size-index);
array[index] = element;
size++;
return true;
}
删除:
public int[] remove(int index){
System.arraycopy(array,index+1,array,index,size-index-1);
size--;
return array;
}
扩容:
public Boolean grow(){
//通常扩容两倍
capacity = capacity>>1;
int[] newArray = new int[capacity];
System.arraycopy(array,0,newArray,0,size);
array = newArray;
return true;
}
遍历:
/**
* 编程式参数循环法
* @param consumer
*/
public void forEach01(Consumer<Integer> consumer){
for (int i = 0; i < size; i++) {
consumer.accept(array[i]);
}
}
public void forEach02(IntConsumer 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++];
}
};
}
/**
* IntStream 循环遍历
*/
public IntStream intStream(){
return IntStream.of(Arrays.copyOfRange(array,0,size));
}
public static void main(String[] args) {
DynamicArray dynamicArray = new DynamicArray();
dynamicArray.addLast(1);
dynamicArray.addLast(2);
dynamicArray.addLast(3);
dynamicArray.addLast(4);
dynamicArray.addLast(5);
//============
dynamicArray.forEach01(new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println(integer);
}
});
System.out.println("=======等效========");
dynamicArray.forEach01((index)->{
System.out.println(index);
});
//==================
//==========继承Iterable之后,可使用增强for循环
for (Integer integer : dynamicArray) {
System.out.println(integer);
}
//==============IntStream 遍历===============
System.out.println("========intStream==========");
dynamicArray.intStream().forEach((item)->{
System.out.println(item);
});
System.out.println("========forEach02==========");
dynamicArray.forEach02((index) -> {
System.out.println(index);
});
}