手动实现ArrayList 增加set和get方法,以及边界越界检查(4)

版权声明: https://blog.csdn.net/weixin_40072979/article/details/82869402
package com.jianshun;

/**
 * 增加:set和get方法
 * 增加:数组边界的检查
 * @author 凡凡
 *
 */
public class SxtArrayList04<E> {

	private Object[] elementData;
	private int size;
	
	private static final int DEFAULT_CAPACITY=10;
	
	public SxtArrayList04(){
		elementData =new Object[DEFAULT_CAPACITY];
	}
	
	public SxtArrayList04(int capacity){
		if(capacity < 0){
			throw  new RuntimeException("容器容量不能为0");
		}else if(capacity == 0){
			elementData  = new Object[DEFAULT_CAPACITY];
		}else{
			elementData = new Object[capacity];
		}
	}
	
	public void add(E element){
		//什么时候扩容
		if(size == elementData.length){
			//扩容操作
			Object[] newArray = new Object[elementData.length + (elementData.length >> 1)];//10-->10+5
			System.arraycopy(elementData,0,newArray,0,elementData.length);
			elementData  = newArray;
		}
		elementData[size++] = element;
	}
	
	public E get(int index){
		checkRange(index);
		return (E)elementData[index];
	}
	
	public void set(E element,int index){
		checkRange(index);
		elementData[index] = element;
	}
	
	public void checkRange(int index){
		//索引是否合法【0,size)
		if(index <0 || index > size-1){
			//不合法
			throw new RuntimeException("索引不合法! "+index);
		}		
	}
	
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();		
		sb.append("[");
		for(int i=0;i<size; i++){
			sb.append(elementData[i]+",");
		}
		sb.append("]");
		return sb.toString();
	}
	
	public static void main(String[] args) {
		SxtArrayList04 s1 = new SxtArrayList04();
		
		for(int i=0;i<40; i++){
			s1.add("gao"+i);
		}
		
		s1.set("ddd", 10);
		System.out.println(s1);
		System.out.println(s1.get(40));
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_40072979/article/details/82869402