Iterator 迭代器模式 java实现

本文详细解析了 Java ArrayList 类的实现原理及其实现的迭代器接口,同时与 JDK 中的 List 接口进行了对比。通过代码示例展示了如何使用 ArrayList 进行元素的添加、获取、删除等操作,并提供了与 JDK 中 List 接口方法的对应使用方式,帮助开发者更好地理解并应用 ArrayList。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package Iterator.MyTest;

public interface Iterator<E> {
	public abstract boolean hasNext();
	public abstract E next();
	public void remove();
}

package Iterator.MyTest;

public interface Iterable<T> {
	public Iterator<T> iterator();
}

 
package Iterator.MyTest;

public class ArrayListIterator<E> implements Iterator<E> {
	int current;
	ArrayList<E> ce;
	public ArrayListIterator(ArrayList<E> ce)
	{
		this.ce=ce;
		current=-1;
	}
	
	@Override
	public boolean hasNext() {
		if(current+1==ce.getLength())
		{
			return false;
		}else{
			return true;
		}
	}

	@Override
	public E next() {
		if(hasNext())
		{
			current++;
			return (E) ce.getObject()[current];
		}else{
			return null;
		}
	}

	@Override
	public void remove() {
		
	}

}

package Iterator.MyTest;

import java.util.Arrays;

public class ArrayList<E> implements Iterable<E> {
	int MIN_SIZE = 10;
	int size;
	Object[] objs;
	Object[] temp;

	public ArrayList() {
		objs = new Object[MIN_SIZE];
		size=-1;
	}

	@Override
	public Iterator<E> iterator() {
		return new ArrayListIterator<E>(this);
	}
	
	public Object[] getObject()
	{
		return objs;
	}

	public int getLength() {
		return size+1;
	}

	public void add(E e) {
		if (size+1 == MIN_SIZE) {
			MIN_SIZE += 10;
/*			temp = objs;
			objs = new Object[MIN_SIZE];
			for(int i=0;i<temp.length;i++)
			{
				objs[i]=temp[i];
			}*/
			/** 简便方法 **/
			objs=Arrays.copyOf(objs, MIN_SIZE);
		}
			objs[++size] = e;
	}

	public boolean isEmpty() {
		if (size == 0) {
			return true;
		} else {
			return false;
		}
	}

	public E remove(int index) {
		E e = (E) objs[index];
		for (int i = index; i < size; i++) {
			objs[i] = objs[i + 1];
		}
		objs[size] = null;
		size--;
		return e;
	}

	public E get(int index) {
		return (E) objs[index];
	}

}
测试代码和jdk中的效果
package Iterator.MyTest;


//import java.util.ArrayList;
//import java.util.ListIterator;

public class MyTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ArrayList<Integer> ais=new ArrayList<Integer>();
		ais.add(1);
		ais.add(3);
		ais.add(4);
		ais.add(5);
		ais.add(3);
		ais.add(4);
		ais.add(5);
		ais.add(3);
		ais.add(4);
		ais.add(5);
		ais.add(3);
		ais.add(4);
		ais.add(5);
		System.out.println("删除了"+ais.remove(2));
		Iterator<Integer> ii=ais.iterator();
		while(ii.hasNext())
		{
			System.out.println(ii.next());
		}
/*		ArrayList<Integer> ais=new ArrayList<Integer>();
		ais.add(1);
		System.out.println("删除了"+ais.remove(2));
		ListIterator<Integer> ii=ais.listIterator();
		while(ii.hasNext())
		{
			System.out.println(ii.next());
		}*/
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值