自定义ArrayList(二)-数组扩容

自定义ArrayList(二)-数组扩容

接自定义数组(一),在前面的基础上加上了数组扩容的修改,这种情况是在存储的数据过大超过原先的数组容量时,为了避免数据溢出,来进行的操作。

public class SetArryList<E> {
	private Object[] elementData;  // 数组
	private int size;              // 长度
	private static final int DEFALT_CAPACITY=10;    //默认数组长度
	
	public  SetArryList() {
		elementData = new Object[DEFALT_CAPACITY]; 
	}
	
	public SetArryList (int capacity) {
		elementData = new Object[capacity]; 
	}
	
	public void add(E element) {
		elementData[size++] = element;
	}
	
	@Override
	public String toString() {  // 重写toString方法
		// TODO Auto-generated method stub
		StringBuilder sBuilder = new StringBuilder();
		//a,b,c
		sBuilder.append("[");
		 for (Object object : elementData) { 
			/*  如果不想打出空值,即可启用该循环
			 * for (int i = 0; i < size; i++) { sBuilder.append(elementData[i]+","); } 
			 */
			sBuilder.append(object+",");
		}
		sBuilder.append("]");
		
		return sBuilder.toString();
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SetArryList s1 = new SetArryList(20);
		s1.add("abc");
		s1.add("数组");
		
		System.out.println(s1);
	}

	public void add(String string) {
		// TODO Auto-generated method stub
		
	}

}

修改存储数据的容量大小

for (int i = 0; i < 40; i++) {
    s1.add("#"+i);  
}

 此时会报错,因为数据过大,存储的时候放不进去,超过了本身的容量,此时就需要进行数组扩容,而在扩容时就需要去修改add()方法。

public void add(E element) {
    // 修改add()方法
    if (size == elementData.length) {
    Object[] newobjects = new Object[/* elementData.length*2 */ elementData.length
					+ (elementData.length << 1);
			
    System.arraycopy(elementData, 0, newobjects, 0, elementData.length);
    elementData = newobjects;
	}
    elementData[size++] = element;
}
	

扩容为原数组的二倍或者加上原数组的一半,在此要一个问题就是——计算的优先级,  elementData.length+ (elementData.length << 1相当于10-->10+10/2

public static void main(String[] args) {
		// TODO Auto-generated method stub
		SetArrayList2 s1 = new SetArrayList2(20);
		for (int i = 0; i < 40; i++) {
			s1.add("#"+i);   // 报错
		}
		/*
		 * s1.add("abc"); s1.add("数组");
		 */
		System.out.println(s1);
	}

 

posted @ 2019-05-13 21:04  小沐CA  阅读(245)  评论(0)    收藏  举报