java 數組實現迭代方法 iterator,模仿Arraylist

來源:互聯網
上載者:User

在網上搜了下,發現沒有關於數組實現迭代的相關文章,所以自己寫了下。

主要是模仿的一個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源碼,是有收穫的!~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.