//移除指定index下的元素 public E remove(int index){ //index是否合法检测 rangeCheck(index); modCount++; //指定index下的元素 E oldValue = elementData(index); //移除后数组长度 int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); //为最后一个元素赋值为null elementData[--size] = null; return oldValue; }
//返回指定index下的元素 E elementData(int index){ return (E) elementData[index]; } //根据元素(对象)移除该元素 publicbooleanremove(Object o){ if (o == null) { for (int index = 0; index < size; index++) if (elementData[index] == null) { fastRemove(index); returntrue; } } else { for (int index = 0; index < size; index++) if (o.equals(elementData[index])) { fastRemove(index); returntrue; } } returnfalse; }
//类似于remove()方法 privatevoidfastRemove(int index){ modCount++; int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; }
remove方法与add正好是一个相反的操作,移除一个元素,会影响到一批数字的位置移动,所以也是比较耗性能。核心代码都是调用了java.lang.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)方法
6. get(int index)
java
1 2 3 4 5 6
//根据指定下标获取元素值 public E get(int index){ rangeCheck(index);
return elementData(index); }
7. set(int index, E element)
java
1 2 3 4 5 6 7 8
//修改指定index下的元素值 public E set(int index, E element){ rangeCheck(index);
E oldValue = elementData(index); elementData[index] = element; return oldValue; }
8. clear()
java
1 2 3 4 5 6 7 8 9 10
//清空所有元素 publicvoidclear(){ modCount++;
// clear to let GC do its work for (int i = 0; i < size; i++) elementData[i] = null;
size = 0; }
9. contains(Object o)
java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
//查询是否包含某个元素 publicbooleancontains(Object o){ return indexOf(o) >= 0; } //具体的实现方法,如果不包含返回-1 publicintindexOf(Object o){ if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null) return i; } else { for (int i = 0; i < size; i++) if (o.equals(elementData[i])) return i; } return -1; }