集合框架
package jihe.list; /** * 手写ArrayList * 底层维护了数组,增删效率低,查询效率高 * @author xiasj * */ public class TestArrayList<E> { //List维护此数组 private Object[] elementData; private int size; //如果New一个新的ArrayList但是没指定默认大小,则设为10 private static final int DEFALT_CAPACITY=10; /** * 构造 */ public TestArrayList() { elementData=new Object[DEFALT_CAPACITY]; } public TestArrayList(int capacity) { if(capacity<0) { throw new RuntimeException("容量不合法"+capacity); }else if(capacity==0){ elementData=new Object[DEFALT_CAPACITY]; } elementData=new Object[capacity]; } /** * get */ public E get(int index) { return (E)elementData[index]; } /** * set */ public void set(E element,int index) { //对索引index判断 if(size<0 || index>size-1) { throw new RuntimeException("索引不合法"+index); } elementData[index]=element; } /** * 扩容 * @param element */ public void add(E element) { //什么时候扩容 if(size==elementData.length) { //扩容 Object[] newArray=new Object[elementData.length+(elementData.length>>1)];//x>>n=x/(2^n) System.arraycopy(elementData, 0, newArray, 0, elementData.length); elementData=newArray; } elementData[size++]=element; } /** * remove * 会完成自己给自己拷贝,把index后面的元素都拷贝一遍,所以效率低 */ public void remove(E element) { //将element和所有元素比较,第一个为true的,返回 for (int i = 0; i < size; i++) { if(element.equals(get(i))) { //将该元素从此处移除 remove(i); } } } public void remove(int index) { //A B C D 删除1位置的B //A C D 会完成自己给自己拷贝,把index后面的元素都拷贝一遍,所以效率低 if(elementData.length-index-1>0) { System.arraycopy(elementData, index+1, elementData, index, elementData.length-index-1); } elementData[--size]=null; } @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) { TestArrayList<String> tl=new TestArrayList<String>(); for (int i = 0; i <100; i++) { tl.add("text"+i); } tl.set("xxx", 1); System.out.println(tl); tl.remove(1); System.out.println(tl); } }Node previous; //前一个节点 Object element; //本节点保存的数据 Node next; //后一个节点
Last updated



