免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1381 | 回复: 0
打印 上一主题 下一主题

Java Iterator模式 模仿Collectin ArrayList LinckedList [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-16 17:20 |只看该作者 |倒序浏览
Java Iterator模式 Java Iterator模式, 模仿Collectin ArrayList LinckedList

一、有如下几个类

1.接口Collection.java

2.接口Iterator.java

3.ArrayList.java

4.LinkedList.java

5.Node.java

关系如下:

代码如下:
1.接口Collection.java
  1. public interface Collection<E> {
  2.     public void add(E e);
  3.     public int size();
  4.     public Iterator iterator();
  5. }
复制代码
2.ArrayList.java
  1. public class ArrayList<E> implements Collection<E>{

  2.     //先给定一个长度为10的数组
  3.     Object [] objects = new Object[10];
  4.      
  5.     //冗余一个int指数,方便判定是组是否为满和返回集合大小
  6.     int index = 0;

  7.     @Override
  8.     //1.动态添加元素
  9.     public void add(E e) {
  10.          
  11.         //1.1先判断数组是否已满
  12.         if(index == objects.length){
  13.             Object [] newObjects = new Object[objects.length*2];
  14.             System.arraycopy(objects, 0, newObjects, 0, objects.length);
  15.             objects = newObjects;   //数组是引用数据类型
  16.         }
  17.          
  18.         //1.2为新添加的元素指定下标
  19.         objects[index] = e;
  20.          
  21.         //1.3index自加1,以方便返回集合在大小
  22.         index++;
  23.     }

  24.     //2.根据下标访问元素
  25.      
  26.     @Override
  27.     //3.返回集合大小
  28.     public int size() {
  29.         return index;
  30.     }

  31.     @Override
  32.     public Iterator iterator() {
  33.         return new ArrayListIterator();
  34.     }
  35.      
  36.     private class ArrayListIterator implements Iterator {

  37.         private int currentIndex = 0;
  38.          
  39.         @Override
  40.         public Object next() {
  41.             // 返回最下一个元素
  42.             Object o = objects[currentIndex];
  43.             currentIndex++;
  44.             return o;
  45.         }

  46.         @Override
  47.         public boolean hasNext() {
  48.             // 判断是否为最后一个元素
  49.             
  50.             if(currentIndex >= index){
  51.                 return false;
  52.             }
  53.             return true;
  54.         }
  55.          
  56.     }
  57.      
  58. }
复制代码
3.LinkedList.java
  1. <span style="font-size: 16px;">public class LinkedList<E> implements Collection<E> {

  2.     private Node head;
  3.     private Node tail;
  4.     private int size;
  5.      
  6.     public void add(E e){
  7.         Node n = new Node(e, null);
  8.         if(head == null){
  9.             head = n;
  10.             tail = n;
  11.             size++;
  12.         } else {
  13.             tail.setNext(n);
  14.             tail = n;
  15.             size++;
  16.         }
  17.     }
  18.      
  19.     public int size(){
  20.         return size;
  21.     }

  22.     @Override
  23.     public Iterator iterator() {
  24.         return new LinkedListIterator();
  25.     }
  26.      
  27.     private class LinkedListIterator implements Iterator {

  28.         private Node currentNode = head;
  29.          
  30.         @Override
  31.         public Object next() {
  32.             Object o = currentNode.getData();
  33.             currentNode = currentNode.getNext();
  34.             return o;
  35.         }

  36.         @Override
  37.         public boolean hasNext() {
  38.             if(currentNode.getNext() == null){
  39.                 return false;
  40.             }
  41.             return true;
  42.         }
  43.          
  44.     }
  45. }
  46. </span>
复制代码
4.Node.java
  1. public class Node {
  2.      
  3.     private Object data;
  4.     private Node next;
  5.      
  6.     public Node(Object data, Node next) {
  7.         super();
  8.         this.data = data;
  9.         this.next = next;
  10.     }

  11.     public Object getData() {
  12.         return data;
  13.     }

  14.     public void setData(Object data) {
  15.         this.data = data;
  16.     }

  17.     public Node getNext() {
  18.         return next;
  19.     }

  20.     public void setNext(Node next) {
  21.         this.next = next;
  22.     }
  23.      
  24.      
  25. }
复制代码
5.Iterator.java
  1. public interface Iterator {
  2.     public Object next();
  3.     public boolean hasNext();
  4. }
复制代码
6.Dog.java
  1. public class Dog {
  2.     private int id;

  3.     public Dog(int id) {
  4.         super();
  5.         this.id = id;
  6.     }
  7.      
  8.     @Override
  9.     public String toString() {
  10.         return "Dog"+id;
  11.     }
  12. }
复制代码
7.测试类CollectionTest.java
  1. public class CollectionTest {

  2.     @Test
  3.     public void test() {
  4.         Collection co = new LinkedList();
  5.         for(int i = 0 ;i < 15 ;i++){
  6.             co.add(new Dog(i));
  7.         }
  8.         System.out.println(co.size());
  9.          
  10.         Iterator it = co.iterator();
  11.         while(it.hasNext()){
  12.             System.out.println(it.next());
  13.         }
  14.     }

  15. }
复制代码
运行结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP