当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

ArrayList的Iterator源码初识

发表于: 2013-11-25   作者:alleni123   来源:转载   浏览次数:
摘要: 刚看了一下ArrayList里实现Iterator部分的源码, 照着写一点点,学习一下。 public class JinglingList<E> extends AbstractList<E> implements List<E>,Cloneable,RandomAccess { private transient
刚看了一下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()方法。

ArrayList的Iterator源码初识

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Iterator的意思是迭代器。 在JDK源码中,Iterator是一个接口。 源码中,实现了Iterator接口的类,有
一、类结构 List,Set,Queue等均继承自Collection接口。 二、属性 非常简单就2个属性。 private trans
一、类结构 List,Set,Queue等均继承自Collection接口。 二、属性 非常简单就2个属性。 private trans
一、类结构 List,Set,Queue等均继承自Collection接口。 二、属性 非常简单就2个属性。 private trans
一、类结构 List,Set,Queue等均继承自Collection接口。 二、属性 非常简单就2个属性。 private trans
ArrayList 1.看源码前应该知道的知识点 /** * */ package com.study.collection; import java.util.
一、类结构 List,Set,Queue等均继承自Collection接口。 二、属性 非常简单就2个属性。 private trans
一、类结构 List,Set,Queue等均继承自Collection接口。 二、属性 非常简单就2个属性。 private trans
首先是ArrayList的继承体系,代码如下: Java代码 publicclassArrayList<E>extendsAbstractList
首先是ArrayList的继承体系,代码如下: Java代码 publicclassArrayList<E>extendsAbstractList
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号