ArrayList笔记
生活随笔
收集整理的這篇文章主要介紹了
ArrayList笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ArrayList筆記
只實現了Collection部分方法,我們需要的是實現排序,所以只要實現toArray()方法和set()方法即可用Collections.sort()來實現排序算法。還有很多不足的地方,日后實現。
import java.util.AbstractList; import java.util.Collections; import java.util.List; import java.util.Arrays; import java.util.RandomAccess;public class MyArray<T> extends AbstractList<T>implements List<T>, RandomAccess, Cloneable, java.io.Serializable{private static final long serialVersionUID = 1L;//元素列表private Object elementData[];//列表大小private int size;//列表容量private int capacity;/*** 默認構造長度為10的數組*/public MyArray (){capacity = 10;elementData = new Object[capacity];}/*** 指定capacity大小的數組* @param capacity 容量*/public MyArray (int capacity){this.capacity = capacity;elementData = new Object[this.capacity];}/*** 插入元素到指定index* @param index 指定位置* @param value 待插入元素*/public void add(int index, T value){//此時size為真實存儲數量+1//比如size=11,真實數量有10個,而插入在第11個位置也是可以的rangeCheck(index);ensureCapacity(size+1);//對一維數組按值傳遞,在元素內容巨大的情況下,它的執行效率遠比for循環高的多System.arraycopy(elementData, index, elementData, index+1, size-index);elementData[index] = value;size++;}/*** 插入元素在列表某尾* @param value 待插入元素* @return */public boolean add(T value) {ensureCapacity(size+1);elementData[size++] = value;return true;}/*** 從位置0開始查找元素* @param value 待查找元素* @return index 索引位置*/public int indexOf(Object value){if(value==null){for(int i=0;i<size;i++){if(elementData[i]==null){return i;}}}else{for(int i=0;i<size;i++){if(value.equals(elementData[i])){return i;}}}return -1;}/*** 從列表某尾開始查找元素* @param value 待查找元素* @return index 索引位置*/public int lastIndexOf(Object value){if(value==null){for(int i=size-1;i>=0;i--){if(elementData[i]==null){return i;}}}else{for(int i=size-1;i>=0;i--){if(value.equals(elementData[i])){return i;}}}return -1;}/*** 刪除指定元素* @param value 待刪除元素* @return 是否刪除成功*/public boolean remove(Object value){if(value==null){for(int i=0;i<size;i++){if(elementData[i]==null){fastRemove(i);return true;}}}else{for(int i=0;i<size;i++){if(value.equals(elementData[i])){fastRemove(i);return true;}}}return false;}/*** 刪除指定位置元素* @param index 待刪除位置元素* @return T 返回被刪除元素*/public T remove(int index){rangeCheck(index);T oldValue = (T) elementData[index];fastRemove(index);return oldValue;}/*** 獲取指定位置的元素* @param index 指定位置* @return 返回指定位置元素*/public T get(int index){rangeCheck(index);return (T) elementData[index];}/*** 刪除指定位置的元素,效率高* @param index 待刪除位置*/private void fastRemove(int index){//待復制的元素數量int num = size-(index+1);//如果復制數量為0就不用去執行arraycopyif(num>0)System.arraycopy(elementData, index+1, elementData, index, num);elementData[--size] = null;}/*** 檢查是否需要擴容*/private void ensureCapacity(int newsize) {if(size>=capacity){int newCapacity = (capacity*3)/2 + 1;if(newsize>newCapacity){newCapacity = newsize;}//copyOf最后調用的是底層實現的System.arraycopy函數,效率比for高elementData = Arrays.copyOf(elementData, newCapacity);capacity = newCapacity;}}/*** 檢查有無越界* @param index 待檢查位置* @throws 越界則拋出異常*/private void rangeCheck(int index) {if(index<0||index>size)throw new ArrayIndexOutOfBoundsException();}public T set(int index, T value){rangeCheck(index);T old = (T) elementData[index];elementData[index] = value;return old;}@Overridepublic int size() {return size;}@Overridepublic boolean isEmpty() {return size==0;}@Overridepublic boolean contains(Object o) {return indexOf(o)>=0;}@Overridepublic <T> T[] toArray(T[] a) {//a的長度小于this的長度,說明a的空間太小if(a.length<size)return (T[]) Arrays.copyOf(elementData, size, a.getClass());//說明a的空間大于等于this的空間,所以直接復制就行了System.arraycopy(elementData, 0, a, 0, size);//說明a的空間比this空間大if(a.length>size)a[size] = null;return a;}@Overridepublic void clear() {for(int i=0;i<size;i++)elementData[i] = null;size = 0;}@Overridepublic Object[] toArray() {return Arrays.copyOf(elementData, size);}//測試單元public static void main(String[] args) {MyArray<Integer> myArray = new MyArray<Integer>();myArray.add(100);myArray.add(100);myArray.add(200);myArray.add(300);myArray.add(2,400);myArray.add(100);for(Integer i : myArray){System.out.print(i+" ");}System.out.println();Collections.sort(myArray);for(Integer i : myArray){System.out.print(i+" ");}}}總結
以上是生活随笔為你收集整理的ArrayList笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019-2020年中国小吃产业发展报告
- 下一篇: 互联网日报 | TikTok将开启Pre