• java 迭代


    迭代器的作用是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。

    java中的很多容器都实现了Iterable接口,容器中的元素都是可以遍历的。

    如下例,list容器中存储的是Integer对象,list可以返回一个Iterator对象用于遍历list中的元素。

            // list中存储的是Integer对象
            List<Integer> list = Arrays.asList(1,2,3,4,5);
            // 容器List实现了Iterable接口,也即实现了iterator()方法
            // 该方法可以生成一个迭代器遍历list中的元素
            Iterator<Integer> iterator = list.iterator();
            // 使用迭代器iterator遍历list中的每一个元素,并打印出来
            while(iterator.hasNext())
                System.out.print(iterator.next() + " ");

    一种更为简洁的写法是:

            // list中存储的是Integer对象
            List<Integer> list = Arrays.asList(1,2,3,4,5);
            // 遍历list中的每一个元素,并打印出来
    for (int x:list) System.out.print(x + " ");

    迭代的实现

    如果要写一个容器类,并使其具有迭代功能,该类应满足如下两个要求:

    该类需继承Iterable接口,实现接口的iterator()方法;

    定义一个实现Iterator接口的类,实现接口的hasNext()方法与next()方法。

    如定义类Bag(背包)用于存储数据元素。

    public class Bag<Item> {
    
        private class Node {
            Item item;
            Node next;
        }
        private Node first;
        private int N;
    
        public boolean isEmpty() {return N==0;}
        public int size() {return N;}
    
        public void add(Item item) {
            Node temp = new Node();
            temp.item = item;
            temp.next = first;
            first = temp;
        }
    
    }

    若要使容器Bag可迭代,Bag需要定义一个实现Iterator接口的类(BagIterator),该类中的hasNext()与next()方法可以帮助遍历元素。

        private class BagIterator implements Iterator<Item> {
    
            private Node current = first;
            @Override
            public boolean hasNext() {
                return current != null;
            }
            @Override
            public Item next() {
                Item temp = current.item;
                current = current.next;
                return temp;
            }
        }

    Bag需要实现Iterable接口,该接口的Iterator()方法,可以返回一个上述的迭代器(BagIterator)

    public class Bag<Item> implements Iterable<Item>

        @Override
        public Iterator<Item> iterator() {
            return new BagIterator();
        }

    完整代码如下:

    import java.util.Iterator;
    
    public class Bag<Item> implements Iterable<Item>{
    
        private class Node {
            Item item;
            Node next;
        }
        private Node first;
        private int N;
    
        public boolean isEmpty() {return N==0;}
        public int size() {return N;}
    
        public void add(Item item) {
            Node temp = new Node();
            temp.item = item;
            temp.next = first;
            first = temp;
        }
    
    
        private class BagIterator implements Iterator<Item> {
    
            private Node current = first;
            @Override
            public boolean hasNext() {
                return current != null;
            }
            @Override
            public Item next() {
                Item temp = current.item;
                current = current.next;
                return temp;
            }
        }
    
        @Override
        public Iterator<Item> iterator() {
            return new BagIterator();
        }
    
    }

    测试如下:

        public static void main(String[] args) {
    
            Bag<Integer> bag = new Bag<>();
            bag.add(3);
            bag.add(2);
            bag.add(3);
            bag.add(1);
    
            for (int i:bag)
                System.out.println(i);
        }

    输出结果:

    1
    3
    2
    3

  • 相关阅读:
    HBase 负载均衡
    HBase的写事务,MVCC及新的写线程模型
    HBase RegionServer宕机处理恢复
    分布式事务实现-Percolator
    MVC框架
    06-JS中li移动第二种形式
    05-JS中li移动第一种形式
    04-JS中文档碎片
    03-JS中添加节点
    02-JS中父节点
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9032746.html
Copyright © 2020-2023  润新知