public class ArrayList
{
private Object[] elementData;
private size;
public ArrayList(int initalCapacity){
this.elementData = new Object[initalCapacity];
}
public boolean add(Object obj){
if(size>= elementData.length){
System.out.println("表空间已满");
return false;
}else{
this.elementData[size++]=obj;
}
}
public int size(){
return size;
}
public boolean isEmpty(){
return size==0;
}
public Object get(int index)
{
if(index<0 || index >= size){
System.out.println("索引越界");
return;
}
return elementData[index];
}
public void set(int index, Object obj){
if(index<0 || index >= size){
System.out.println("索引越界");
return;
}
elementData[index]=obj;
}
public int indexOf(Object obj){
if(obj==null){
for(int i=0;i<size;i++){
if(elementData[i]==null)
return i;
}
}else{
for(int i=0;i<size;i++){
if(obj.equals(elementData[i]))
return i;
}
}
return -1;
}
public int lastIndexOf(Object o) {
if (o == 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 (o.equals(elementData[i]))
return i;
}
return -1;
}
public void add(int index,Object obj){
if(index<0 || index >= size){
System.out.println("索引越界");
return;
}
if(size>= elementData.length){
System.out.println("表空间已满");
return;
}
for(int i=size;i>index;i--){
elementData[i]=elementData[i-1];
}
elementData[index]=obj;
size++;
}
public void remove(int index){
if(index<0 || index >= size){
System.out.println("索引越界");
return;
}
for(int i=index;i<size;i++){
a[i]=a[i+1];
}
size--;
}
private class Iterator
{
int cursor;
public boolean hasNext(){
return cursor !=size;
}
public Object next(){
int i= cursor;
if (i >= ArrayList.this.size)
return "NoSuchElementException";
cursor=i+1;
Object[] elementData = ArrayList.this.elementData ;
return elementData[i];
}
}
public static void main(String[] args) {
ArrayList list =new ArrayList(10);
list.add(1);
list.add(2);
list.add(3);
for(Iterator i = list.new Iterator();i.hasNext() )
System.out.println(i.next());
}
}
private static final int DEFAULT_CAPACITY = 10;
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
transient Object[] elementData;
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] = e;
return true;
}
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}