本文主要是介绍java 数组实现迭代方法 iterator,模仿Arraylist,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在网上搜了下,发现没有关于数组实现迭代的相关文章,所以自己写了下。
主要是模仿的一个Arraylist 实现的主要的功能!
代码如下:
首先建个接口:
package com.list;public interface List<T> extends Iterable<T>{void add(T e);void remove(T t);void removeAt(int index);int size();void clear();int indexOf(Object object);void set(T e,int index);
}
第二部建立ArrayList类:
package com.list.impl;import java.util.Iterator;import com.list.List;public class ArrayList<T> implements List<T> {Object [] objects=new Object[0];public void add(T t) {// TODO Auto-generated method stubObject [] tmp=new Object[objects.length+1];tmp[tmp.length-1]=t;System.arraycopy(objects, 0, tmp, 0, objects.length);objects=tmp;}@Overridepublic void remove(T t) {// TODO Auto-generated method stubfor(int i=0;i<objects.length;i++){if(objects[i].equals(t)){if(i>0){Object object[]=new Object[objects.length-1];System.arraycopy(objects, 0, object, 0, i);System.arraycopy(objects, i+1, object, i, objects.length-i-1);objects=object;break;}}}}@Overridepublic void removeAt(int index) {// TODO Auto-generated method stubif(index>=0){Object object[]=new Object[objects.length-1];System.arraycopy(objects, 0, object, 0, index);System.arraycopy(objects, index+1, object, index, objects.length-index-1);objects=object;}}@Overridepublic int size() {// TODO Auto-generated method stubreturn objects.length;}@Overridepublic void clear() {// TODO Auto-generated method stubthis.objects=new Object[0];}@Overridepublic int indexOf(Object object) {// TODO Auto-generated method stubfor(int i=0;i<objects.length;i++){if(objects[i].equals(object)){return i;}}return -1;}@Overridepublic void set(T e, int index) {// TODO Auto-generated method stubobjects[index]=e;}@Overridepublic Iterator<T> iterator() {// TODO Auto-generated method stubIterator<T> iterator=new Iterator<T>() {int index=0;boolean hasNext=true;@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn hasNext;}@Overridepublic T next() {// TODO Auto-generated method stubif(index++<objects.length-1){hasNext=true;return (T)objects[index-1];}else {hasNext=false;return (T)objects[objects.length-1];}}@Overridepublic void remove() {// TODO Auto-generated method stubobjects=new Object[0];}};return iterator;}}
Arraylist需要实现iterator这个接口
这个接口有 这几个方法
hasNext()
next()
remove()
hasNext 是否有下一条数据
next 获取下一个对象
remove 移除全部
我们在类中实现iterator这个接口后,重写public Iterator<T> iterator() 这个方法
Iterator<T> iterator=new Iterator<T>() {int index=0;boolean hasNext=true;@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn hasNext;}@Overridepublic T next() {// TODO Auto-generated method stubif(index++<objects.length-1){//判断是否超过数组hasNext=true;return (T)objects[index-1];}else {hasNext=false;return (T)objects[objects.length-1];//将数组对象转换成泛型}}@Overridepublic void remove() {// TODO Auto-generated method stubobjects=new Object[0];//这是数组对象}};return iterator;
这样就实现了一个简单的Arraylist,可查看JDK的源码,实现方法也是差不多的。
移除方法,官方的JDK源码中,也是用
System.arraycopy(objects, 0, object, 0, index);
数组拷贝的方式实现的!
下面是我的使用和测试代码:
package com.test;import com.list.*;
import com.list.impl.ArrayList;
public class Test {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubList<Object> list=new ArrayList<Object>();String str="张三";list.add(1);list.add(2);list.add(3);list.add(new Object());list.add(new Object());list.add(new Object());list.add(str);list.add("hello");list.remove(str);list.remove(str);list.removeAt(0);for (Object object : list) {System.out.println(object);}System.out.println(list.size());}}
可以看得出来,使用方法和官方是一样的!
多看JDK源码,是有收获的!~
这篇关于java 数组实现迭代方法 iterator,模仿Arraylist的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!