当前位置: 首页 > 知识库问答 >
问题:

Java迭代器中单链表的实现

程举
2023-03-14
current.item = item;
Node<T> nextNode = new Node<T>();
current.next = nextNode;
current = nextNode;

当前:Bag$Node@1786F9D5下一个:Bag$Node@704D6E83

看起来很清楚,至少在我看来,下一个节点每次都会设置一个新节点。我将所有四个元素都添加到包中,但条目丢失,并为每个索引返回null。toArray()函数显示[null,null,null,null]

我敢肯定这是一件简单得让人眼花缭乱的事情。下面是整个实现。

import java.util.Iterator;

public class Bag<T> implements Iterable<T> {
    private Node current;
    //Node<T> head;
    private int numberofProducts;
    T[] myBag;
    int defaultCapacity;

    public Iterator<T> iterator() {
        return new ListIterator<T>(current);
    }

    public Bag(int defaultCapacity) {
        this.current = new Node<T>();
        this.numberofProducts = 0;
        this.defaultCapacity = defaultCapacity;
    }

    public void add(T item) {
        if(isFull()) {
            System.out.println("bags full, yo");
            return;
        }

        current.item = item;
        Node<T> nextNode = new Node<T>();
        current.next = nextNode;
        current = nextNode;

        numberofProducts++;

    //Node<T> nextNode = current;
    //current = new Node<T>();
    //current.item = item;
    //current.next = nextNode;
    //numberofProducts++;


    }

    public Object[] toArray() {
        Object[] array = new Object[size()];

        int i = 0;
        Node<T> node = current;
        //Node<T> node = head;
        while(node.next != null) {
            array[i] = node.item;
            node = node.next;
            i++;
        }

        return array;
    }

    public boolean isEmpty() {
        return this.numberofProducts <= 0;
    }

    public boolean isFull() {
        return this.numberofProducts >= defaultCapacity;
    }

    public int size() {
        return this.numberofProducts;
    }

    private class Node<T> {
        private T item;
        private Node<T> next;
    }


    private class ListIterator<T> implements Iterator<T> {

        private Node<T> current;

        public  ListIterator(Node<T> first) {
            current = first;
        }

        public boolean hasNext() {

            return current != null;
        }

        public T next() {
            if(hasNext()) {
                T item = current.item;
                current = current.next;
                return item;
            }
            return null;
        }

        public void remove() {

        }
    }
}

暂时还没有答案

 类似资料:
  • 我试图以正确的顺序返回一个迭代器来处理单链表中的元素,但我无法使其正确工作。有没有一个简单的方法来完成这件事,因为我想我想得太多了。顺便说一下,这是在Java,我已经导入了迭代器包。

  • 本文向大家介绍Java单链表的实现代码,包括了Java单链表的实现代码的使用技巧和注意事项,需要的朋友参考一下 下面是小编给大家分享的一个使用java写单链表,有问题欢迎给我留言哦。 首先定义一个Node类 接下来定义一个单链表,并实现相关方法: 最后我们可以通过测试类来做相关测试: 至此,对单链表的操作就笔记到这里了。 以上所述是小编给大家介绍的Java单链表的实现代码,希望对大家有所帮助,如果

  • 我目前正在学习数据结构考试,遇到了一个关于迭代的问题。 在单链表上实现双向迭代器是可能的吗?如果是的话,如何实施呢? 我有一个想法,首先向前遍历链表,并存储一个临时链表,该临时链表保存反向的节点。但是遍历这个临时列表将导致一个只允许向后遍历的迭代器。

  • 问题内容: 如果我在java中的链表上使用了for-each循环,是否可以保证以它们在列表中出现的顺序迭代元素? 问题答案: 保证链表按顺序运行。 从文档中 有序集合(也称为序列)。该界面的用户可以精确控制列表中每个元素的插入位置。用户可以通过其整数索引(列表中的位置)访问元素,并在列表中搜索元素。 iterator() 以适当的顺序返回此列表中元素的迭代器。

  • 问题内容: 什么是迭代器和集合?这两个有关系吗? 接口迭代器是否只预定义了这些方法名称,还是用户定义了这些方法名称?下面的这四行实际上说明了什么? 谢谢。我正在看一本藏书。 问题答案: 顾名思义,Java集合是事物的集合。如果您不知道该单词,请在字典中查找。 有很多类型的集合。以集合的数学概念为例。您可以将任意事物放入集合中,但是永远不会包含同一事物。在集中的东西是没有顺序的,那就是你不能说 A

  • 本文向大家介绍PHP单链表的实现代码,包括了PHP单链表的实现代码的使用技巧和注意事项,需要的朋友参考一下 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 单链表简介 链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 关键代码如下所示: 以上所述是小