`

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 ArrayList Iterator

    这个资源的目的是通过模拟Java ArrayList的Iterator实现,帮助理解Iterator设计模式。 首先,我们来详细解释一下ArrayList和Iterator的概念。ArrayList是一个可变大小的数组,它允许我们在任何位置插入和删除元素。...

    ArrayList源码分析

    本篇文章将深入探讨ArrayList的源码,了解其内部实现机制,以及在实际编程中如何有效地使用ArrayList。 1. **ArrayList的构造函数** ArrayList提供了多个构造函数,包括无参构造、指定容量构造和初始化容量并赋值...

    ArrayList源码.zip

    源码分析中,我们还可以看到ArrayList是如何实现迭代器(Iterator)的。迭代器是Java集合框架的重要组成部分,允许我们遍历ArrayList的元素而不需要暴露底层的实现细节。ArrayList的迭代器实现了hasNext()和next()...

    ArrayList源码分析(含jdk1.8).pdf

    在了解ArrayList的源码分析时,我们主要探讨其在Java Development Kit (JDK) 1.8中的实现。ArrayList是一个非常重要的集合框架,用于动态数组的实现,其功能类似于数组,但可以在运行时动态调整大小。它是一个非线程...

    ArrayList的源码

    源码分析见我博文:http://blog.csdn.net/wabiaozia/article/details/50684556

    ArrayList源码

    反编译系统的,只是做个例子。 为了凑够20个字,我多打几个字……

    ArrayList源码Jdk1.8

    ### ArrayList源码解析(JDK 1.8) #### 概述 `ArrayList`是Java集合框架中的一个核心组件,它提供了动态数组的功能。与固定大小的数组不同,`ArrayList`可以随着元素的增加而自动扩展其容量。在JDK 1.8中,`...

    Java中ArrayList类的源码解析

    Java中ArrayList类的源码解析 ArrayList是Java中最常用的集合类之一,它实现了List接口,继承自AbstractList抽象类。在ArrayList中,我们可以看到它的源码实现了Iterable接口、List接口和Collection接口。下面我们...

    计算机后端-Java-Java核心基础-第24章 集合01 14. ArrayList的源码分析.avi

    计算机后端-Java-Java核心基础-第24章 集合01 14. ArrayList的源码分析.avi

    java——ArrayList-源码解析.docx

    ArrayList 是 Java 中一种常用的列表类,它是 List 接口的实现,基于动态数组的数据结构。ArrayList 的核心特性在于其能够动态地调整数组的大小以适应元素数量的变化,从而提供了比传统固定大小数组更为灵活的使用...

    第二章 ArrayList源码解析1

    第二章 ArrayList源码解析 ArrayList是Java集合框架中的一种动态数组,它继承自AbstractList,并实现了List接口。ArrayList主要用于存储可变大小的对象列表,它的核心是通过一个Object类型的数组elementData来实现...

    JDK8的ArrayList源码文件

    JDK8的ArrayList源码文件

    硬核ArrayList源码分析,答应我每天看一遍好么

    《硬核ArrayList源码分析——深入理解Java集合框架》 ArrayList是Java集合框架中的一个重要组成部分,它是基于动态数组实现的列表。在Java 1.8版本中,ArrayList的实现细节和内部工作原理对于理解其性能和行为至关...

    ArrayList 源码深度解析

    ArrayList 源码深度解析 一、重新认识ArrayList 什么是ArrayList? ArrayList是基于数组实现的List类,封装了一个动态再分配的Object数组,以达到可以动态增长和缩减的索引序列。 长啥样? 如图,是一个长度为6,...

    java集合知识点详解,包括ArrayList和 HashSet以及Iterator等

    图文并茂,能让大家很好的理解java中这个重要的知识点。 此文档需要wps或者office软件来查看,如果你没有此软件,到http://www.wps.com.cn 下载wps即可查看此文档。 注:本人所有资源都是共享的,的资源分都是0!

    ArrayList扩容机制源码解析.md

    本资源根据个人学习和总结,主要介绍Java中ArrayList扩容机制源码的解析,主要包含文字和代码等内容,以源码的形式进行分析,详细介绍了ArrayList扩容机制的整个流程,特此将该资源分享

    Java中的ArrayList的底层源码解读、LinkedList、Vector的区别介绍

    能学到什么:ArrayList的源码分析,自动扩容和自动缩容的源码分析,相关参数的深度解析,从是什么,为什么,怎么做三个角度进行讲解,用通俗易懂的白话进行介绍,LinkedList和Vector以及ArrayList的区别以及使用场景...

Global site tag (gtag.js) - Google Analytics