ArrayList的Iterator源码初识

刚看了一下ArrayList里实现Iterator部分的源码, 照着写一点点,学习一下。


public class JinglingList<E> extends AbstractList<E> implements List<E>,Cloneable,RandomAccess
{	
	

	
	
	private transient Object[] elementData;
	
	private int size;
	
	public JinglingList(int initialCapacity){
		System.out.println("constructor int");
		this.elementData=new Object[initialCapacity];
	}
	
	public JinglingList(){
		this(10);
		System.out.println("constructor");
		
	}
	
	
	public boolean add(E e) {
		elementData[size++]=e;
		return true;
		
	};
	
	
	public Iterator<E> iterator(){
		return new Itr();
	}
	
	private class Itr implements Iterator<E>{
		
		int cursor; //index of next element to return
		int lastRet=-1; //index of last element returned;-1 if no such
		int expectedModCount=modCount;
		@Override
		public boolean hasNext()
		{
			//只要指针所在位置不等于集合size,就返回true。
			return cursor!=size;
		}

		@Override
		public E next()
		{
			int i=cursor;
			Object[] elementData=JinglingList.this.elementData;
			
                       //指针指向数组的下一个
			cursor=i+1;
			
                        //返回指针指向的数组元素(这里是i,cursor已经指向下一个元素
			return (E)elementData[lastRet=i];
		}

		@Override
		public void remove()
		{
			// TODO Auto-generated method stub
			
		}
		
	}
	
	@Override
	public E get(int index)
	{
		// TODO Auto-generated method stub
		return elementData(index);
	}
	
	E elementData(int index){
		return (E) elementData[index];
	}
	

	@Override
	public int size()
	{
		// TODO Auto-generated method stub
		return size;
	}

}



元素说明:
Object[] elementData-> 存放元素的数组。 在ArrayList被初始化的时候会默认大小为10.

int size->集合的size

private class Itr ->内部私有类,实现Iterator接口.  该类可以对elementData数组进行操作。


运行代码:
public class Test1
{
	public static void main(String[] args)
	{
 
		
		List list=new JinglingList();
		list.add("hello");
		list.add("world");
		
		Iterator it=list.iterator();
		
		while(it.hasNext()){
			System.out.println(it.next());
		}
		
		System.out.println(list.get(0));
		System.out.println(list.get(1));
		
		
	}
}


运行结果:
constructor int
constructor
hello
world
hello
world



异常:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.lj.compareTo.Test1.main(Test1.java:25)
这个异常是因为没有在类中实现AbstractList中定义的方法。
这里是没有写add()方法。

你可能感兴趣的:(java,list,iterator,JavaSE)