标签:pre ide 方法 判断 [] 扩容 构造 for false
1.先上代码:
public class ArrayList<E> { private E[] data; private int size; /** * 构造方法,初始化容量capacity * @param capacity */ public ArrayList(int capacity){ data = (E[]) new Object[capacity]; size = 0; } /** * 默认的构造方法,默认capacity=10 */ public ArrayList(){ this(10); } /** * 获取数组中元素的个数 * @return */ public int getSize(){ return size; } /** * 获取数组的容量 * @return */ public int getCapacity(){ return data.length; } /** * 判断数组是否为空 * @return */ public boolean isEmpty(){ return size == 0; } /** * 在第index位置插入一个新元素 * @param index * @param e */ public void add(int index,E e){ if(index < 0 || index > size){ throw new IllegalArgumentException("Add Failed"); } //扩容 if (size == data.length){ resize(2*data.length); } //index后的元素都向后移动一位,注意:先移动后面的 for (int i = size; i > index;i--){ data[i+1] = data[i]; } data[index] = e; size++; } /** * 扩容 * @param newCapacity */ private void resize(int newCapacity){ E[] newData = (E[]) new Object[newCapacity]; for (int i = 0; i < size; i++){ newData[i] = data[i]; } data = newData; } /** * 向所有元素后添加一个新元素 * @param e */ public void addLast(E e){ add(size,e); } /** * 向所有元素前添加一个新元素 * @param e */ public void addFirst(E e){ add(0,e); } /** * 获取index索引位置的元素 * @param index * @return */ public E get(int index){ if(index < 0 || index >= size){ throw new IllegalArgumentException("Get Failed"); } return data[index]; } /** * 修改index位置的元素 * @param index * @param e */ public void set(int index,E e){ if(index < 0 || index >= size){ throw new IllegalArgumentException("Get Failed"); } data[index] = e; } /** * 判断数组中是否有元素e * @param e * @return */ public boolean contains(E e){ for (int i = 0; i < size; i++){ if(data[i].equals(e)){ return true; } } return false; } /** * 查找元素e在数组中的位置,不存在返回-1 * @param e * @return */ public int find(E e){ for (int i = 0; i < size; i++){ if(data[i].equals(e)){ return i; } } return -1; } /** * 从数组中删除index位置的元素,返回删除的元素 * @param index * @return */ public E remove(int index){ if(index < 0 || index >= size){ throw new IllegalArgumentException("remove Failed"); } E ret = data[index]; //删除后,index后面的元素向前都移动一位,从index+1开始移动 for (int i = index+1; i < size; i++){ data[i-1] = data[i]; } size --; if(size == data.length/4 && data.length != 0){ resize(data.length/2); } return ret; } /** * 从数组中删除第一个元素, * @return */ public E removeFirst(){ return remove(0); } /** * 从数组中删除最后一个元素 * @return */ public E removeLast(){ return remove(size-1); } /** * 删除数组中元素e * @param e */ public void removeElement(E e){ int index = find(e); if(index != -1){ remove(index); } } @Override public String toString() { StringBuilder res = new StringBuilder(); res.append(String.format("Array:size = %d, capacity = %d \n",size,data.length)); res.append(‘[‘); for (int i = 0; i < size; i++) { res.append(data[i]); if(i != size-1){ res.append(","); } } res.append(‘]‘); return res.toString(); } }
标签:pre ide 方法 判断 [] 扩容 构造 for false
原文地址:https://www.cnblogs.com/inspred/p/arraylist.html