java迭代数组_java 数组实现迭代方法 iterator,模仿Arraylist | 学步园

在网上搜了下,发现没有关于数组实现迭代的相关文章,所以自己写了下。

主要是模仿的一个Arraylist 实现的主要的功能!

代码如下:

首先建个接口:

package com.list;

public interface List extends Iterable{

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 implements List {

Object [] objects=new Object[0];

public void add(T t) {

// TODO Auto-generated method stub

Object [] tmp=new Object[objects.length+1];

tmp[tmp.length-1]=t;

System.arraycopy(objects, 0, tmp, 0, objects.length);

objects=tmp;

}

@Override

public void remove(T t) {

// TODO Auto-generated method stub

for(int i=0;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;

}

}

}

}

@Override

public void removeAt(int index) {

// TODO Auto-generated method stub

if(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;

}

}

@Override

public int size() {

// TODO Auto-generated method stub

return objects.length;

}

@Override

public void clear() {

// TODO Auto-generated method stub

this.objects=new Object[0];

}

@Override

public int indexOf(Object object) {

// TODO Auto-generated method stub

for(int i=0;i

if(objects[i].equals(object)){

return i;

}

}

return -1;

}

@Override

public void set(T e, int index) {

// TODO Auto-generated method stub

objects[index]=e;

}

@Override

public Iterator iterator() {

// TODO Auto-generated method stub

Iterator iterator=new Iterator() {

int index=0;

boolean hasNext=true;

@Override

public boolean hasNext() {

// TODO Auto-generated method stub

return hasNext;

}

@Override

public T next() {

// TODO Auto-generated method stub

if(index++

hasNext=true;

return (T)objects[index-1];

}

else {

hasNext=false;

return (T)objects[objects.length-1];

}

}

@Override

public void remove() {

// TODO Auto-generated method stub

objects=new Object[0];

}

};

return iterator;

}

}

Arraylist需要实现iterator这个接口

这个接口有 这几个方法

hasNext()

next()

remove()

hasNext 是否有下一条数据

next 获取下一个对象

remove 移除全部

我们在类中实现iterator这个接口后,重写public Iterator iterator()  这个方法

Iterator iterator=new Iterator() {

int index=0;

boolean hasNext=true;

@Override

public boolean hasNext() {

// TODO Auto-generated method stub

return hasNext;

}

@Override

public T next() {

// TODO Auto-generated method stub

if(index++

hasNext=true;

return (T)objects[index-1];

}

else {

hasNext=false;

return (T)objects[objects.length-1];//将数组对象转换成泛型

}

}

@Override

public void remove() {

// TODO Auto-generated method stub

objects=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 stub

List list=new ArrayList();

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源码,是有收获的!~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来给你讲一下Java迭代器的数组实现。 首先,我们需要定义一个迭代器类,这个类需要实现Java标准库中的Iterator接口。Iterator接口中包含了 hasNext()、next()、remove() 三个方法。接下来,我们可以定义一个内部类来实现这个迭代器接口,代码如下: ``` public class ArrayIterator<E> implements Iterator<E> { private int cursor; private E[] array; public ArrayIterator(E[] array) { this.array = array; this.cursor = 0; } @Override public boolean hasNext() { return cursor < array.length; } @Override public E next() { if (!hasNext()) { throw new NoSuchElementException(); } return array[cursor++]; } @Override public void remove() { throw new UnsupportedOperationException(); } } ``` 在这个迭代器类中,我们使用了一个 cursor 指针来记录当前迭代到了数组中的哪个位置。在 hasNext() 方法中,我们判断 cursor 是否小于数组的长度,如果是则表示还有下一个元素可以迭代。在 next() 方法中,我们首先判断是否还有下一个元素,如果没有则抛出 NoSuchElementException 异常,否则返回当前位置的元素,并将 cursor 指针向后移动一位。在 remove() 方法中,我们直接抛出 UnsupportedOperationException 异常,因为我们不支持删除操作。 现在,我们就可以使用这个迭代器来遍历一个数组了,例如: ``` Integer[] array = {1, 2, 3, 4, 5}; Iterator<Integer> iterator = new ArrayIterator<>(array); while (iterator.hasNext()) { Integer element = iterator.next(); System.out.println(element); } ``` 这段代码会输出数组中的每一个元素,即: ``` 1 2 3 4 5 ``` 希望我的回答能够帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值