Java Deque实现无法转换项目

问题描述 投票:0回答:1

双端执行我实现了通用的Deque数据结构。

请查看此实现

并且错误对我来说没有意义,请给我一些信息

import java.util.NoSuchElementException;
import java.util.Iterator;
public class Deque<Item> implements Iterable<Item> 
{
   private int n;
   private Node first;
   private Node last;
   private class Node
   {
      private Item item;
      private Node next;
   }
   private class ListIterator implements Iterable<Item>
   {
      private Node<Item> current = first;
      public boolean hasNext()
      {
         return current != null;
      }
      public Item next()
      {
         if(!hasNext())
         {
            throw new NoSuchElementException("Deque underflow");
         }
         Item item = current.item;
         current = current.next;
         return item;
      }
      public void remove()
      {
         throw new UnsupportedOperationException();
      }
   }
   public Iterator<Item> iterator()
   {
      return new ListIterator();
   }
   public Deque()
   {
      n = 0;
      first = null;
      last = null;
   }

   // is the deque empty?
   public boolean isEmpty()
   {
      return n ==0;
   }

   // return the number of items on the deque
   public int size()
   {
      return n ;
   }

   // add the item to the front
   public void addFirst(Item item)
   {
      if(item == null)
      {
         throw new IllegalArgumentException();
      }
      Node oldNode = first;
      Node newNode = new Node();
      newNode.item = item;
      if(oldNode == null)
      {
         last = newNode;
      }
      else
      {
         newNode.next = oldNode;
      }
      first = newNode;
      n++;
   }

   // add the item to the back
   public void addLast(Item item)
   {
      if(item == null)
      {
         throw new IllegalArgumentException();
      }
      Node oldNode = last;
      Node newNode = new Node();
      newNode.item = item;
      if(oldNode == null)
      {
         first = newNode;
      }
      else
      {
         oldNode.next = newNode;
      }
      last = newNode;
      n++;
   }

   // remove and return the item from the front
   public Item removeFirst()
   {
      if(isEmpty())
      {
         throw new NoSuchElementException("Deque underflow");
      }
      Item item = first.item;
      first = first.next;
      n--;
      if(isEmpty())
      {
         first=null;
      }
      return item;
   }

   // remove and return the item from the back
   public Item removeLast()
   {
      if(isEmpty())
      {
         throw new NoSuchElementException("Deque underflow");
      }
      Node secondLast = first;
      if(n>3)
      {
         while(secondLast.next.next != null)
         {
            secondLast = secondLast.next;
         }
      }
      else 
      {
         secondLast = first;
      }
      Item item = last.item;
      last = secondLast;
      n--;
      if(isEmpty())
      {
         last = null;
      }
      return item;
   }
}

测试文件

import java.util.Iterator;

public class dequeTest
{
   public static void main(String[] args)
   {
      Deque<Double> d = new Deque<Double>();
      System.out.println("Empty? "+d.isEmpty()+" \tSize is "+ d.size());
      d.addFirst(2.0);
      System.out.println(d.removeFirst());
      System.out.println("Empty? "+d.isEmpty()+" \tSize is "+ d.size());
      d.addFirst(1.2);
      System.out.println(d.removeLast());
      System.out.println("Empty? "+d.isEmpty()+" \tSize is "+ d.size());
      d.addLast(1.4);
      System.out.println("Empty? "+d.isEmpty()+" \tSize is "+ d.size());
      for(int i = 0;i<10;i++)
      {
         d.addLast((double)i);
      }
      for(double value: d)
      {
         System.out.print(value);
      }   
   }
}

错误类型不匹配:无法从Deque.ListIterator转换为Iterator

有人可以帮助解决该错误吗?如果您有更好的主意,请修复它

java iterator deque
1个回答
0
投票

Iterable<T>不是Iterable<T>,但具有获取Iterator<T>的方法。只需更改

Iterator<T>

to

Iterator<T>

除此之外,我建议您在需要public Iterator<Item> iterator() { return new ListIterator(); } 时使用public Iterator<Item> iterator() { return new ListIterator().iterator(); } (甚至ArrayDeque)。您的实现似乎都没有改善,更糟的是,您的类名遮盖了ArrayDeque interface(您没有implement)。最后,LinkedList应该是Deque(而不仅仅是java.util.Deque)。

© www.soinside.com 2019 - 2024. All rights reserved.