设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器
2017-04-20 10:59
330 查看
上周六就開始写这篇博客,之后一直耽误了。到前天才開始写。今天醒的早,就把这部分整理一下。
本文内容參考易学设计模式和马士兵的迭代器模式的视频。
了解迭代器模式一个作用就是让你在使用 迭代器遍历集合类的时候 认为更自然。'
一 、迭代器模式简单介绍
【定义】 跌倒器模式提供一种顺序訪问一个聚合对象中各个元素,而又不暴露该对象的内部表示的方法。
【原理】 主要4部分组成:迭代器角色、详细迭代器角色、容器角色和详细容器角色。
【使用时机】当訪问一个聚合对象的内容而无需暴露它的内部表示,或者须要支持对集合对象的多种遍历。或者为
遍历不同的聚合结构提供一个统一的接口时,就能够考虑是用迭代器模式。
二 、实现ArrayList和linkedList的迭代器
这里仅仅是简单实现,详细的能够看看源代码。记得csdn中有一个 兰亭风雨 的博客写有集合类源代码解析的文章。
上代码:
Iterator.java
Collection.java
Node,java
ArrayList.java
LinkedList.java
Test>java
以上代码測试通过。
本文内容參考易学设计模式和马士兵的迭代器模式的视频。
了解迭代器模式一个作用就是让你在使用 迭代器遍历集合类的时候 认为更自然。'
一 、迭代器模式简单介绍
【定义】 跌倒器模式提供一种顺序訪问一个聚合对象中各个元素,而又不暴露该对象的内部表示的方法。
【原理】 主要4部分组成:迭代器角色、详细迭代器角色、容器角色和详细容器角色。
【使用时机】当訪问一个聚合对象的内容而无需暴露它的内部表示,或者须要支持对集合对象的多种遍历。或者为
遍历不同的聚合结构提供一个统一的接口时,就能够考虑是用迭代器模式。
二 、实现ArrayList和linkedList的迭代器
这里仅仅是简单实现,详细的能够看看源代码。记得csdn中有一个 兰亭风雨 的博客写有集合类源代码解析的文章。
上代码:
Iterator.java
package com.chan; public interface Iterator { Object next(); boolean hasNext(); }
Collection.java
package com.chan; public interface Collection { void add(Object obj); int size(); Iterator iterator(); }
Node,java
package com.chan; public class Node { private Object data; private Node next; public Node(Object data, Node next) { super(); this.data = data; this.next = next; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
ArrayList.java
package com.chan; public class ArrayList implements Collection { Object[] objects = new Object[10]; int index = 0; public void add(Object o) { if(index == objects.length) { Object[] newObjects = new Object[objects.length * 2]; System.arraycopy(objects, 0, newObjects, 0, objects.length); objects = newObjects; } objects[index] = o; index ++; } public int size() { return index; } public Iterator iterator() { return new ArrayListIterator(); } private class ArrayListIterator implements Iterator { private int currentIndex = 0; @Override public boolean hasNext() { if(currentIndex >= index) return false; else return true; } @Override public Object next() { Object o = objects[currentIndex]; currentIndex ++; return o; } } }
LinkedList.java
package com.chan; public class LinkedList implements Collection { Node head = null; Node tail = null; int size = 0; public void add(Object o) { Node n = new Node(o, null); if(head == null) { head = n; tail = n; } tail.setNext(n); tail = n; size ++; } public int size() { return size; } @Override public Iterator iterator() { return new LinkedListIterator(); } private class LinkedListIterator implements Iterator{ private Node currentNode = head; private int nextIndex = 0;//參考源代码中的写法 @Override public Object next() { Object data = currentNode.getData(); currentNode = currentNode.getNext(); nextIndex ++; return data; } @Override public boolean hasNext() { return nextIndex != size; } } }
Test>java
package com.chan; public class Test { public static void main(String[] args) { //Collection c = new ArrayList(); Collection c = new LinkedList(); for(int i=0; i<15; i++){ c.add("test-"+i); } System.out.println(c.size()); Iterator it = c.iterator(); while(it.hasNext()) { Object o = it.next(); System.out.print(o + " "); } } //15 //test-0 test-1 test-2 test-3 test-4 test-5 test-6 test-7 test-8 test-9 test-10 test-11 test-12 test-13 test-14 }
以上代码測试通过。
相关文章推荐
- 设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器
- 设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器
- Java集合之ArrayList和LinkedList的实现原理以及Iterator详解
- Java——集合框架之ArrayList,LinkedList,迭代器Iterator
- java实现ArrayList LinkedList 和迭代器
- Java集合之ArrayList和LinkedList的实现原理以及Iterator详解
- 集合 List ArrayList LinkedList HashMap HashSet Iterator 迭代器
- ArrayList、LinkedList和HashSet、TreeSet以及HashMap、TreeMap是如何实现存储的?
- ArrayList、LinkedList和HashSet、TreeSet以及HashMap、TreeMap是如何实现存储的?
- List接口的实现类ArrayList和LinkedList的一些区别(备忘)
- ArrayList和LinkedList底层实现与理解
- 遍历ArrayList与LinkedList,使用FOR与迭代器的区别
- 集合框架源码分析三(实现类篇ArrayList,LinkedList,HashMap)
- Java使用Arrays、ArrayList、LinkedList、Vector实现插入查询性能分析
- Java基础---集合框架---迭代器、ListIterator、Vector中枚举、LinkedList、ArrayList、HashSet、TreeSet、二叉树、Comparator
- java中的线性表的内部实现(ArrayList、LinkedList)
- 集合框架1(Collection的共性方法,迭代器,ArrayList,LinkedList,Vector)
- 集合框架源码分析三(实现类篇ArrayList,LinkedList,HashMap)
- ArrayList 、LinkList、List 区别 & 迭代器iterator的使用 & HashMap、Hashtable、LinkedHashMap、TreeMap
- LinkedList以及Iterator的简单实现