使用迭代器返回列表中最大对象位置的泛型方法



我正在制作一个通用方法,该方法可以接受任何类型的列表并找到该列表中最大值的位置,这是我制作的更大程序的一部分,我制作了一个迭代器,我用它来运行列表。我快完成了,但我有两个问题:1.我无法初始化泛型方法中的迭代器。2.无法从列表中获取第一个值。我不擅长解释,相反,我在代码中注释了问题区域。任何帮助都非常感谢!

通用方法:

 public static <T> int max(List<T> list, Comparator<? super T> c)
  {

      if (list == null)
      {
          throw new NoSuchElementException();
      }
      int m = 0; // index max value
      T maxvalue = list[0]; // max value (error: How do it get the value of the list here?)
      int counter = 0;
      Iterator<T> it = new DobbeltLenketListeIterator(); //( error: cannot be referenced from a static context)
      while(it.hasNext()) 
      {
          counter++;
          if (c.compare(it.next(), maxvalue) > 0)
          {
              maxvalue = it.next;
              m = counter;
          }

      }

      return m;
  }

迭代器:

 private class DoublelinkedlistIterator implements Iterator<T>
  {
    private Node<T> p;
    private boolean removeOK;

    private DoublelinkedlistIterator()
    {
      p = head;        
      removeOK = false;  
    }
    public boolean hasNext()
    {
        if(p.next != null )
        {
            return true;
        }
        return false;
    }
    public T next()
    {

      if( hasNext() == false)
      {
        throw new NoSuchElementException();
      }
      Node<T> q = p;
      p = p.next;
      removeOK = true;
      return q.value;

    }
    public void remove()
    {
      if(!removeOK) throw new IllegalStateException("illegal!");
      removeOK = false;
      Node<T> q = head;
      if(head.next == p)
      {
          head = head.next;
          if(p== null) tale = null;
      }
      else
      {
          Node<T> r = head;
          while (r.next.next != p)
          {
              r = r.next;
          }
          q= r.next;
          r.next = p;
          if(p== null) tale = r;
      }
      q.value = null;
      q.value = null;
    }
  }  
  public Iterator<T> iterator()
  {
    return new DoublelinkedlistIterator();
  }
  public Iterator<T> iterator(int index)
  {
      indexcontrol(index);
   Iterator<T> it = new DoublelinkedlistIterator();
      for (int i = 0; i < index && it.hasNext(); i++, it.next()); 
          return it;
  }
  1. 将您的内部类标记为 static

    private static class DoublelinkedlistIterator implements Iterator<T>

  2. 您尝试将 List 的第一个元素作为数组元素检索。你应该这样写:

    T maxvalue = list.get(0);

尝试进行以下两项更改:

使迭代器类static并为其提供泛型参数T

private static class DoublelinkedlistIterator<T> implements Iterator<T>

然后当你使用它时,传递它的类型:

Iterator<T> it = new DobbeltLenketListeIterator<T>(); 

这是一个困难的问题,但我得到了一些帮助,答案是:Iterator it = list.iterator();

T 最大值 = it.next();

谢谢你们,我很欣赏你们的回答!

最新更新