import java.util.Iterator;
public class MyArrayList<AnyType> implements Iterable<AnyType>{
private static final int DEFAULT_CAPACITY=10;
private int theSize;//数组大小
private AnyType[] theItems;//存放数据
public MyArrayList(){
doClear();
}
public void clear(){
doClear();
}
private void doClear(){//集合初始化
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;
}
@SuppressWarnings("unchecked")//告诉编译器忽略警告
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;
}
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()-1;i++){
theItems[i]=theItems[i+1];
}
theSize--;
return removedItem;
}
public java.util.Iterator<AnyType> iterator() {//迭代器
// TODO Auto-generated method stub
return new ArrayListIterator<AnyType>(this);
}
//内部类
private class ArrayListIterator<AnyType> implements java.util.Iterator<AnyType>
{
private int current=0;
private MyArrayList<AnyType> theList;
public ArrayListIterator(MyArrayList<AnyType> list){
this.theList=list;
}
public boolean hasNext() {
// TODO Auto-generated method stub
return current<theList.size();
}
@Override
public AnyType next() {
// TODO Auto-generated method stub
if(!hasNext()){
throw new java.util.NoSuchElementException();
}
return theList.theItems[current++];
}
@Override
public void remove() {
// TODO Auto-generated method stub
MyArrayList.this.remove(--current);
}
}
}
手动编写ArrayList类
最新推荐文章于 2023-07-13 16:14:02 发布