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);
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值