ArrayList 的实现
package com.meteor.algorithm;
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
* arrayList实现
* Created by Meteor on 2016/3/21.
*/
public class MyArrayList<T> implements Iterable<T> {
private static final int DEFAULT_CAPACITY = 10;
private int theSize;
private T[] theItems;
//构造方法
public MyArrayList(){
clear();
}
//清空
public void clear(){
theSize = 0;
ensureCapacity(DEFAULT_CAPACITY);
}
//返回size
public int size(){
return theSize;
}
//判空
public boolean isEmpty(){
return size()==0;
}
//去空项
public void trimToSize(){
ensureCapacity(size());
}
//取项
public T get(int idx){
if(idx<0 || idx>=size()){
throw new ArrayIndexOutOfBoundsException();
}
return theItems[idx];
}
//设置项
public void set(int idx,T newValue){
if(idx<0 || idx>=size()){
throw new ArrayIndexOutOfBoundsException();
}
theItems[idx] = newValue;
}
public void ensureCapacity(int newCapacity){
if(newCapacity<theSize){
return;
}
T[] old = theItems;
theItems = (T[])new Object[newCapacity];
for (int i = 0; i <size() ; i++) {
theItems[i] = old[i];
}
}
public boolean add(T x){
add(size(),x);
return true;
}
public void add(int idx,T x){
if(theItems.length == size()){
ensureCapacity(size()*2+1);
}
theItems[idx] = x;
theSize++;
}
public T remove(int idx){
T removeItem = theItems[idx];
for (int i = idx; i < size()-1 ; i++) {
theItems[i] = theItems[i+1];
}
theSize--;
return removeItem;
}
public Iterator<T> iterator(){
return new ArrayListIterator();
}
private class ArrayListIterator implements Iterator<T>{
private int current = 0;
public boolean hasNext() {
return current<size();
}
public T next() {
if (!hasNext()){
throw new NoSuchElementException();
}
return theItems[current++];
}
public void remove(){
MyArrayList.this.remove(--current);
}
}
}
TEST
package com.meteor.algorithm;
import java.util.Iterator;
/**
* 实现ArrayList测试类
* Created by Meteor on 2016/3/21.
*/
public class ArrayListTest {
public static void main(String[] args) {
MyArrayList<String> strList = new MyArrayList<String>();
for (int i = 0; i < 20; i++) {
String str = "hello"+i;
strList.add(str);
}
strList.remove(8);
System.out.println(strList.size());
Iterator<String> iterator = strList.iterator();
while (iterator.hasNext()){
String temp = iterator.next();
if (temp.equals("hello10")){
iterator.remove();
}else {
System.out.println(temp);
}
}
}
}