public void add(int index,int e){
if(index<0 || index>this.size){
throw new IllegalArgumentException("index must between 0 and size");
}
for(int position=size-1;position>=index;position--){
this.datas[position+1]=this.datas[position];
}
this.datas[index]=e;
this.size++;
}
在指定索引index处删除元素
public int remove(int index){
if(index<0 || index>=this.size){
throw new IllegalArgumentException("index must between 0 and size");
}
int ret=this.datas[index];
for(int i=index+1;i<size;i++){
this.datas[i-1]=this.datas[i];
}
size--;
return ret;
}
下面给出具体的带泛型实现
2,代码实现
package com.dream21th.algorithmicdatastructure.array;
/**
* @Auther: hp
* @Date: 2019/9/7 15:42
* @Description:
*/
public class MyExtendArray<E> {
private E[] datas;
private int size;
/**
* 创建有参构造函数,初始化数组容量
* @param capacity
*/
public MyExtendArray(int capacity){
datas=(E[])new Object[capacity];
size=0;
}
/**
* 构造无参函数,初始化数组容量
*/
public MyExtendArray(){
this(10);
}
public int getSize(){
return this.size;
}
public boolean isEmpty(){
return this.size==0;
}
/**
* 在指定索引位置加值
* @param index
* @param e
*/
public void add(int index,E e){
if(index<0 || index>this.size){
throw new IllegalArgumentException("index must between 0 and size");
}
if(this.size==datas.length){
resize(2*datas.length);
}
for(int position=size-1;position>=index;position--){
this.datas[position+1]=this.datas[position];
}
this.datas[index]=e;
this.size++;
}
private void resize(int newCapacity) {
E[] newDatas= (E[]) new Object[newCapacity];
for(int i=0;i<this.datas.length;i++){
newDatas[i]=this.datas[i];
}
this.datas=newDatas;
}
/**
* 在第一个位置加入元素
* @param e
*/
public void addFirst(E e){
this.add(0,e);
}
/**
* 在最后一个位置添加元素
* @param e
*/
public void addLast(E e){
this.add(size,e);
}
public E get(int index){
if(index<0 || index>=this.size){
throw new IllegalArgumentException("index must between 0 and size");
}
return this.datas[index];
}
public void set(int index,E e){
if(index<0 || index>=this.size){
throw new IllegalArgumentException("index must between 0 and size");
}
this.datas[index]=e;
}
public boolean contain(E e){
for(int i=0;i<size;i++){
if(this.datas[i].equals(e)){
return true;
}
}
return false;
}
public int find(int e){
for(int i=0;i<size;i++){
if(this.datas[i].equals(e)){
return i;
}
}
return -1;
}
public E remove(int index){
if(index<0 || index>=this.size){
throw new IllegalArgumentException("index must between 0 and size");
}
E ret=this.datas[index];
for(int i=index+1;i<size;i++){
this.datas[i-1]=this.datas[i];
}
size--;
this.datas[size]=null;
if(this.size==this.datas.length/2){
resize(this.datas.length/2);
}
return ret;
}
public E removeFirst(){
return remove(0);
}
public E removeLast(){
return remove(size-1);
}
@Override
public String toString() {
StringBuilder builder=new StringBuilder();
builder.append(String.format("Array: size = %d,capacity = %d \n",this.size,this.datas.length));
builder.append("[");
for(int i=0;i<size;i++){
builder.append(this.datas[i]);
if(i!=size-1){
builder.append(",");
}
}
builder.append("]");
return builder.toString();
}
}