public class <AnyType> implements Iterable<AnyType> {
private static final int DEFAULT_CAPACITY = 10;
private int thesize;
private AnyType[] theItems;
public (){
clear();
}
public void clear(){
thesize = 0;
ensureCapacity(DEFAULT_CAPACITY);
}
public int size(){
return thesize;
}
public boolean isEmpty(){
return size()==0;
}
public void trimTosize(){
ensureCapacity(size());
}
public AnyType get(int idx){
if(idx < 0 && idx >= size()){
throw new ArrayIndexOutOfBoundsException();
}
return theItems[idx];
}
public AnyType set(int idx, AnyType newVal){
if(idx < 0 && idx >= size()){
throw new ArrayIndexOutOfBoundsException();
}
AnyType old = theItems[idx];
theItems[idx] = newVal;
return old;
}
* 数组过小时对数组进行扩容
* @param newCapacity 新的数组大小
*/
public void ensureCapacity(int newCapacity){
if (newCapacity<thesize)
return;
AnyType[] old = theItems;
theItems = (AnyType[]) new Object[newCapacity];
for (int i = 0; i < size(); i++) {
theItems[i] = old[i];
}
}
public boolean add(AnyType x){
add(size(),x);
return true;
}
* 指定位置添加元素
* @param idx 指定位置
* @param x 添加元素
*/
public void add(int idx, AnyType x){
if (theItems.length==size())
ensureCapacity(size()*2+1);
for (int i = thesize; i>idx; i--){
theItems[i]=theItems[i-1];
}
theItems[idx] = x;
thesize++;
}
public AnyType remove(int idx){
AnyType removedItem = theItems[idx];
for (int i = idx; i<size(); i++){
theItems[i]=theItems[i+1];
}
thesize--;
return removedItem;
}
* Returns an iterator over elements of type {@code T}.
*
* @return an Iterator.
*/
public Iterator<AnyType> iterator() {
return new ArrayListIterator() ;
}
private class ArrayListIterator implements java.util.Iterator<AnyType>{
private int current = 0;
public boolean hasNext() {
return current<size();
}
public AnyType next() {
if (!hasNext()){
throw new java.util.NoSuchElementException();
}
return theItems[current++];
}
public void remove() {
MyArrayList.this.remove(--current);
}
}
}
近期评论