本实例基于学习ArrayList的实现原理,实例代码毫无使用价值,供学习使用
具体详情参考如下代码:
package com.yanxun.MyArraylist; public class SxtArrayList<E> { private Object[] elementData; private int size; public static final int DEFALT_CAPACITY = 10; public SxtArrayList() { elementData = new Object[DEFALT_CAPACITY]; } //构造传参构造大小 public SxtArrayList(int capacity) { if(capacity < 0) throw new RuntimeException("这个容器的容量不能为负数"); else if(capacity == 0) elementData = new Object[DEFALT_CAPACITY]; else elementData = new Object[capacity]; } //想容器末尾添加元素 public void add(E element) { //扩容操作 if(size == elementData.length) { //申请一个新的大的数组 Object[] newArray = new Object[elementData.length + (elementData.length >> 1)]; //将原数组拷贝到新数组中,并将索引应用到新数组,好像java会自动回收0引用的对象,所以不用释放之前的申请的内存 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 int size() { return size; } //判断当前容器是否为空 public boolean isEmpty() { return size == 0? true : false; } //检查数组下标是否合法,索引下标是否越界 public void checkRange(int index) { if(index < 0 || index > size - 1) { //不合法 throw new RuntimeException("索引值不合法" + index);//手动抛出异常 } } //移除容器中对应的元素 public void remove(E element) { //element,将它和所有元素比较, for(int i = 0; i < size; ++ i){ if(element == elementData[i]) { //将该元素移除容器 remove(i); } } } //移除容器中对应索引的元素 public void remove(int index) { int numMoved = elementData.length - index - 1; if(numMoved>0) System.arraycopy(elementData, index + 1, elementData, index, numMoved); elementData[-- size] = null; } //将容器转化成字符串输出,在输出容器时自动调用 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) { SxtArrayList<String> s1 = new SxtArrayList(20); for(int i = 0; i < 40; ++ i) { s1.add("gao" + i); } System.out.println(s1.get(39)); s1.set("dfs", 10); s1.remove(3); System.out.println(s1); } }