JAVA 实现顺序表(一) ArryList数组实现

定义ArryList接口

public interface ArryList {
    
    
   //返回数据元素个数    
	public int size();
	
//	返回线性表中序号为i的数据元素
	public Object get(int i);
	
//    如果线性表为空返回true,反之返回false
	public boolean isEmpty();
	
//    判断线性表是否包含元素o
	public boolean contains(Object o);
	
//    返回元素o在线性表中的序号    
	public int indexOf(Object o);

//    将数据元素o插入到i号位置 
	public void add(int i ,Object o);
	
//    将元素o插入到线性表末尾
    public void add(Object o);
   	
//    删除线性表中序号为i的元素,并返回
    public void remove(int i);
    
//    删除线性表中第一个与e相同的元素
    public void remove(Object e);
    
//    替换线性表中序号为i的数据元素为e,并返回原始数据元素
    public void replace(int i,Object e);  	
}

底层实现

public class RealizeArryList implements ArryList {
    
    
  private Object[] elementData;
  
  private int size;  // 数组元素的个数
  
  LinerTable(){
    
    
	  //指定长度默认长度为4
	  this(4);
  }
  
 LinerTable(int initialCapacity) {
    
      
	  elementData =new Object[initialCapacity];  
	  //创建	 长度为initialCapacity的数组
  }
  @Override
   public int size() {
    
    
 //返回元素个数
	return size;
 }
@Override
public Object get(int i) {
    
    
	if( i<0||i>size-1)
	{
    
    
		throw new MyArrayIndexOutOfBoundsException("数组索引越界异常"+i);
		//自定义异常
	}
	return elementData[i];
}

@Override
public boolean isEmpty() {
    
    
	return size==0 ;
}

@Override
    public boolean contains(Object o) {
    
    

	for(int i=0;i < size;i++)
	{
    
    
		if(elementData[i] == o)
			return true;	
	}
	return false;
}

@Override
public int indexOf(Object o) {
    
    

	    int i;
	   for( i=0;i< size;i++) {
    
    
		if(elementData[i] == o)		
		break;
	}
	   return i;
}

@Override
public void add(int i, Object o) {
    
    

	if(i<0||i>size) {
    
    
		throw new MyArrayIndexOutOfBoundsException("数组索引越界异常"+i);
	}
	if (size == elementData.length )
	{
    
    
		grow();
 	}
	for(int j = size ; j > i;j --) {
    
    
		elementData [j] = elementData [j-1];
	}
	elementData[i] = o ;
	size++;
}

@Override
public void add(Object o) {
    
    	

	this.add(size,o);
//	if (size == elementData.length )
//	{
    
    
//		grow();
// 	}
//	elementData[size++ ] = o ;
}

 private void grow() {
    
    
//		Object [] newArr =new Object[size+(size>>2)];
//		for(int i =0 ;i < size;i++)
//		{
    
    
//		 newArr[i] = elementData[i];
//		}
//		elementData = newArr;
或
elementData = Arrays.copyOf(elementData, elementData.length+(elementData.length >> 1));//数组扩容

 }
@Override
public void remove(int i) {
    
    

	if(i<=0||i>size) {
    
    
		throw new MyArrayIndexOutOfBoundsException("数组索引越界异常"+i);
	}
	for(int j=i;j<size-1; j++)
	{
    
    
	 elementData[j]=elementData[j+1];
	}
	size--;		
}

@Override
public void remove(Object e) {
    
    

	 for(int i=0;i<size;i++)
	 {
    
    
		 if(elementData[i]==e)
		 {
    
    
			 for(int j=i;j < size-1; j++)
				{
    
    
				 elementData[j]=elementData[j+1];
				}	
			 size--;
			 break;
		 }	
	 } 	
}

@Override
public void replace(int i, Object e) {
    
    

	if(i<=0||i>size) {
    
    
		throw new MyArrayIndexOutOfBoundsException("数组索引越界异常"+i);
	}
	elementData[i]= e;
	
}
@Override
public String toString() {
    
    

    if(size==0)
    	return "[]";
    StringBuilder builder = new StringBuilder();
    builder.append("[");
    for(int i=0 ;i < size ; i++)
    {
    
       
    	if(i!=size-1) {
    
    
    	builder.append(elementData[i]+",");
       }
    	else {
    
    
    		builder.append(elementData[i]);
    	}
    }
     builder.append("]");
    return builder.toString();
    }
}

//自定义异常

public class MyArrayIndexOutOfBoundsException extends RuntimeException {
    
    
	public MyArrayIndexOutOfBoundsException() {
    
    
		super();
	}
	public MyArrayIndexOutOfBoundsException(String message) {
    
    
		super(message);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_45630718/article/details/106302085