/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package arthur.datastruct.programe;
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
*
* @author dell
*/
public class MyListText implements Iterable {
private static final int DEFAULT_CAPACITY = 10;
private int size;
private Object[] items;
/**
* clear the data in items
*/
public void clear() {
for (int i = 0; i < items.length; i++) {
items[i] = null;
}
}
/**
*return the size of MyList
* @return int
*/
public int size() {
return this.size;
}
/**
* to decide weather MyList is empty or not
* @return boolean
*/
public boolean isEmpty() {
return 0 == size;
}
/**
* get Object by id
* @param id
* @return
*/
public Object getObject(int id) {
if (id >= this.size() || id < 0) {
throw new ArrayIndexOutOfBoundsException();
}
return items[id];
}
public MyListText() {
items = new Object[DEFAULT_CAPACITY];
}
@Override
public Iterator iterator() {
return new ListIterator();
}
/**
* to update the data at number id in arraylist
* @param id the number in arrayList
* @param newObject the data you want to renew
* @return
*/
public Object set(int id, Object newObject) {
if (id >= this.size() || id < 0) {
throw new ArrayIndexOutOfBoundsException();
}
Object oldObject = this.items[id];
items[id] = newObject;
return oldObject;
}
/**
* add new Object to items,before add we must make the space is enough,
* if not ,double the items' space
* @param object
* @return
*/
public boolean add(Object object) {
//double the items' space
if (size == items.length) {
expandedLengthOfArray(items.length * 2);
}
items[size] = object;
size++;
return true;
}
/**
* add a new data for items,before executing adddition,we,before
* adding we must make the space is enough,
* if not ,double the items' space
* we should move
* back the data,and the size should be ++
* @param id
* @param object
*/
public void add(int id, Object object) {
//double the space if items has no enough space
if (items.length == this.size()) {
this.expandedLengthOfArray(size * 2);
}
//move back data
for (int i = this.size; i > id; i--) {
items[i] = items[i - 1];
}
items[id] = object;
this.size++;
}
/**
*
* to increase the length of array,
* if the newCapacity is less than the size,then
* this operation is not reasonable, else when executive this method, we must
* Copy the original data to make sure the data are not lost
* @param newCapacity
*/
public void expandedLengthOfArray(int newCapacity) {
// copy data
Object[] oldItems = this.items;
items = new Object[newCapacity];
System.arraycopy(oldItems, 0, items, 0, this.size);
}
/**
* remove the data at index position in items,we must make sure the data left
* afther remove move forward,and the total number of size will be --
* @param index
* @return
*/
public Object remove(int index) {
Object removeObject = items[index];
for (int i = index; i < this.size(); i++) {
items[i] = items[i + 1];
}
this.size--;
return removeObject;
}
private class ListIterator implements Iterator {
private int index;
@Override
public boolean hasNext() {
return this.index < size();
}
@Override
public Object next() {
if (!this.hasNext()) {
throw new NoSuchElementException();
}
return items[index++];
}
@Override
public void remove() {
MyListText.this.remove(--index);
}
}
}
