90.模拟实现ArrayList

添加泛型,实现add toString

package mycollection;
/*
 * 添加泛型
 */
public class sArrayList02<E> {
	
	private Object[] elementData; //元素数组
	private int size; //容量
	
	private final static int DEFAULT_CAPACITY = 10;
	//final修饰变量表明变量只能被初始化一次,static修饰变量表示只保留一份副本
	
	//默认构造
	public sArrayList02() {
		elementData = new Object[DEFAULT_CAPACITY];
	}
	
	public sArrayList02(int initialCapacity) {
		if(initialCapacity >= 0)
			elementData = new Object[initialCapacity];
		else
            throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
	}
	
	public void add(E element) {
		elementData[size++] = element;
	}
	
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append("[");
		for(int i = 0; i < size; ++i) {
			sb.append(elementData[i]+",");
		}
		sb.setCharAt(sb.length() - 1, ']');
		return sb.toString();
//		return elementData.toString();
	}
	
	public static void main(String[] args) {
		sArrayList02 s = new sArrayList02(20);
		s.add("ability");
		s.add("temperment");
		
//		System.out.println(s.toString());
		System.out.println(s); //打印对象会自动调用toString方法
	}
}


增加数组扩容

package mycollection;
/*
 * 增加数组扩容
 */
public class sArrayList03<E> {

	private Object[] elementData; //元素数组
	private int size; //容量
	
	private final static int DEFAULT_CAPACITY = 10;
	//final修饰变量表明变量不可变,static修饰变量表示只保留一份副本
	
	//默认构造
	public sArrayList03() {
		elementData = new Object[DEFAULT_CAPACITY];
	}
	
	public sArrayList03(int initialCapacity) {
		if(initialCapacity >= 0)
			elementData = new Object[initialCapacity];
		else
            throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
	}
	
	public void add(E element) {
		//判断要不要扩容
		if(size == elementData.length) {
			Object[] newArray = new Object[elementData.length + (elementData.length>>1)];
			//加法优先级高于>>
//			for(int i=0; i<size; ++i)
//				newArray[i] = elementData[i];
			System.arraycopy(elementData, 0, newArray, 0, elementData.length);
			elementData = newArray;
		}
		elementData[size++] = element;
	}
	
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append("[");
		for(int i = 0; i < size; ++i) {
			sb.append(elementData[i]+",");
		}
		sb.setCharAt(sb.length() - 1, ']');
		return sb.toString();
//		return elementData.toString();
	}
	
	public static void main(String[] args) {
		sArrayList03<String> s = new sArrayList03<String>(2);
		s.add("ability");
		s.add("temperment");
		
		s.add("node");
		
//		System.out.println(s.toString());
		System.out.println(s); //打印对象会自动调用toString方法
	}
}

增加set,get和数组边界检查

package mycollection;
/*
 * 增加set get
 * 数组边界检查
 */
public class sArrayList04<E> {	private Object[] elementData; //元素数组
	private int size; //容量
	
	private final static int DEFAULT_CAPACITY = 10;
	//final修饰变量表明变量不可变,static修饰变量表示只保留一份副本
	
	//默认构造
	public sArrayList04() {
		elementData = new Object[DEFAULT_CAPACITY];
	}

	public sArrayList04(int initialCapacity) {
		if(initialCapacity >= 0)
			elementData = new Object[initialCapacity];
		else
            throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
	}
	
	public void add(E element) {
		//判断要不要扩容
		if(size == elementData.length) {
			Object[] newArray = new Object[elementData.length + (elementData.length>>1)];
			//加法优先级高于>>
			System.arraycopy(elementData, 0, newArray, 0, elementData.length);
			elementData = newArray;
		}
		elementData[size++] = element;
	}
	 
	public E get(int index) {
		return (E)elementData[index];
	}
	/*
	public void set(E element, int index) {
		//判断索引是否合法
		if(index < size && index > 0)
			elementData[index] = element;
		else
			throw new RuntimeException("索引不合法: "+index);
	}
	*/
	public void set(E element, int index) {
		//判断索引是否合法,不合法抛出异常
		checkRange(index);
		elementData[index] = element;
	}
	
	public void checkRange(int index) {
		if(index >= size || index < 0)
			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.setCharAt(sb.length() - 1, ']');
		return sb.toString();
	}
	
	public static void main(String[] args) {
		sArrayList04<String> s = new sArrayList04<String>(2);
		s.add("ability");
		s.add("temperment");
		s.add("node");
		
		System.out.println(s); //打印对象会自动调用toString方法
		
		System.out.println(s.get(2));
		s.set("milk", 2);
		System.out.println(s.get(2));
		
//		s.set("honey", -10);
	}
}

增加remove(两种),增加size isEmpty

package mycollection;

import javax.print.attribute.Size2DSyntax;

/*
 * 增加remove(两种)
 * 增加size isEmpty
 */
public class sArrayList05<E> {	private Object[] elementData; //元素数组
	private int size; //容量
	
	private final static int DEFAULT_CAPACITY = 10;
	//final修饰变量表明变量不可变,static修饰变量表示只保留一份副本
	
	//默认构造
	public sArrayList05() {
		elementData = new Object[DEFAULT_CAPACITY];
	}

	public sArrayList05(int initialCapacity) {
		if(initialCapacity >= 0)
			elementData = new Object[initialCapacity];
		else
            throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
	}
	
	public void add(E element) {
		//判断要不要扩容
		if(size == elementData.length) {
			Object[] newArray = new Object[elementData.length + (elementData.length>>1)];
			//加法优先级高于>>
			System.arraycopy(elementData, 0, newArray, 0, elementData.length);
			elementData = newArray;
		}
		elementData[size++] = element;
	}
	 
	public E get(int index) {
		return (E)elementData[index];
	}
	/*
	public void set(E element, int index) {
		//判断索引是否合法
		if(index < size && index > 0)
			elementData[index] = element;
		else
			throw new RuntimeException("索引不合法: "+index);
	}
	*/
	public void set(E element, int index) {
		//判断索引是否合法,不合法抛出异常
		checkRange(index);
		elementData[index] = element;
	}
	
	public void checkRange(int index) {
		if(index >= size || index < 0)
			throw new RuntimeException("索引不合法: "+index);
	}
	
	public void remove(E element) {
		for(int i=0; i<size; ++i) {
			if(element.equals(get(i))) {
				remove(i);
			}
		}
	}
	
	public void remove(int index) {
		checkRange(index);
		if(index != size-1)
			System.arraycopy(elementData, index+1, elementData, index, elementData.length-index-1);
//		for(int i=index; i<size-1; ++i)
//			set(get(i+1), i);
		elementData[--size] = null;
	}
	
	public int size() {
		return size;
	}
	
	public boolean isEmpty() {
		return size == 0 ? true : false;
	}
	
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append("[");
		for(int i = 0; i < size; ++i) {
			sb.append(elementData[i]+",");
		}
		sb.setCharAt(sb.length() - 1, ']');
		return sb.toString();
	}
	
	public static void main(String[] args) {
		sArrayList05<String> s = new sArrayList05<String>(2);
		s.add("ability");
		s.add("temperment");
		s.add("node");
		
		System.out.println(s); //打印对象会自动调用toString方法
		
		System.out.println(s.get(2));
		s.set("milk", 2);
		System.out.println(s.get(2));
		
		System.out.println(s);
		s.remove(1);
		s.remove("milk");
		System.out.println(s);
		
		System.out.println(s.size);
		System.out.println(s.isEmpty());
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43808700/article/details/107394115
今日推荐