java数据结构之动态顺序表

public class Main {

	public static void main(String[] args) {
		
		
		ArrayList list = new ArrayList();
		
		
		
		list.add(99);
		list.add(88);
		list.add(77);
		list.add(66);		
		list.add(55);
		list.add(44);
		
		list.addLocation(2, 80);
		list.addLocation(list.size(), 100);
		
		list.set(2, 8);
		
		/*if(list.get(2)!=80) {
			throw new IllegalArgumentException("测试不通过");
		}*/
		
		System.out.println(list.toString());//打印数组

	}

}


public class ArrayList {
         private int size;//元素的数量,即真实数量,其值为编号+1
         private int[] elements;
         private static final int DEFAULT_CAPCITY = 10;
         private static final int ELEMENT_NOT_FOUND = -1;
         public ArrayList(int capcity) {
        	 capcity = (capcity < DEFAULT_CAPCITY) ? DEFAULT_CAPCITY : capcity;//如果传入参数小于10,则用 DEFAULT_CAPCITY的容量10
        	 elements = new int[capcity];//默认给的容量
         }
         
         
         public ArrayList() {        	
        	 this(DEFAULT_CAPCITY);//构造函数互相调用 用this即elements = new int[DEFAULT_CAPCITY];
         }
         
         public void clear() {
        	 size = 0;
         }
         
         public int size() {
        	 return size;
         }
         
         public boolean isEmpty() {
        	 if(size==0) {
        		 return true;
        	 }
        	 else 
        	 {
        		 return false;
        	 }
         }
         
         public int get(int index) {
        	 rangeCheck(index);
        	 return elements[index];
         }
         
         public int set(int index,int element) {
        	 rangeCheck(index);
        	 
        	 int old = elements[index];//原来位置的元素
        	 elements[index] = element;//把新的放进去
        	 return old;
         }
         
         public int indexOf(int element) {
        	 for(int i = 0;i < size;i++)
        	 {
        		 if(elements[i]==element)
        			 return i;
        	 }
        	 return ELEMENT_NOT_FOUND;
         }
         
         public boolean contains(int element) {
        	 for(int i = 0;i < size;i++) {
        		 if(elements[i]==element)
        			 return true;
        	 }
        	 return false;
         }
         
         
         public void add(int element)
         {
        	 elements[size] = element;
        	 size++;
         }
         
        
         
         public int remove(int index) {
        	 rangeCheck(index);
        	 int old = elements[index];//先把要删除的数据做保存
        	 for(int i= index+1;i<size;i++)
        	 {
        		 elements[i-1] = elements[i];
        	 }
        	 size--;
        	 return old;
         } 
         
         
         public void addLocation(int index,int element) {
        	 rangeCheckForAdd(index);
        	 
        	 ensureCapcity(size+1);//扩容操作
        	 
        	 for(int i = size-1;i>=index;i--)
        	 {
        		 elements[i+1] = elements[i];
        	 }
        	 size++;
        	 elements[index] = element; 
         }
         
         
         /*
         异常封装
         */
         private void outOfBounds(int index) {
        	 throw new IndexOutOfBoundsException("Index:"+",Size:"+size);//越界抛异常
         }
         private void rangeCheck(int index) {
        	 if(index<0||index>=size)
         	{
         		 outOfBounds(index);
         	}
         }
         private void rangeCheckForAdd(int index) {
        	 if(index<0||index>size)
          	{
          		 outOfBounds(index);
          	}
        	
         }
         
        private void ensureCapcity(int capcity) {//扩容操作
        	int oldCapcity = elements.length;
        	if(oldCapcity>=capcity) return;
        	
        	int newCapcity = oldCapcity+(oldCapcity>>1);//×1.5倍
        	
        	int[] newElements  = new int[newCapcity];
        	
        	for(int i = 0;i<size;i++)
        	{
        		newElements[i] = elements[i];
        	}
        	elements = newElements;
        	System.out.println("扩容");
        }
         
         
         
         
         
         public String toString() {
        	 StringBuilder string = new StringBuilder();
        	 string.append("size=").append(size).append(",[");
        	 for(int i = 0;i<size;i++)
        	 {
        		 string.append(elements[i]);
        		 if(i!=size-1) 
        		 {
        			 string.append(",");
        		 }
        	 }
        	 string.append("]");
        	 return string.toString();
         }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值