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

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

戚逸清
2023-03-14
 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个答案

东方辉
2023-03-14

>

  • 将内部类标记为静态:

    私有静态类DoublelinkedlistIterator实现迭代器

    您试图将列表的第一个元素作为数组元素检索。您应该这样写:

  •  类似资料:
    • 将这些视为对象: 查看java文档,对于LinkedList类,LinkedList类中没有迭代器方法的实现,但是,实现是在AbstractSequentialList类中。 listIterator()方法在AbstractList类中实现,AbstractSequentialList的父类,总结一下,如果我没弄错的话,它返回一个不使用节点概念的迭代器对象。 但是方法是在LinkedList类中

    • 我正在尝试有这样的方法签名:public static List FilterList(List collection,String FilterString,String Property=“”) 这样,我可以从任何地方调用这个方法,并传递给它任何列表,它将返回给我一个过滤的列表。

    • 本文向大家介绍JAVA利用泛型返回类型不同的对象方法,包括了JAVA利用泛型返回类型不同的对象方法的使用技巧和注意事项,需要的朋友参考一下 有时需要在方法末尾返回类型不同的对象,而return 语句只能返回一个或一组类型一样的对象。此时就需要用到泛型。 首先先解释个概念, 元组:它是将一组对象直接打包存储于其中的一个单一对象,这个容器对象允许读取其中元素,但不能修改。 利用泛型创建元组 测试 输出

    • 如何将此迭代器与泛型类型一起使用?以下是我在“main”函数中尝试的方法: 结果是:<代码>无法从静态上下文引用非静态类项 结果是:<代码>无法从静态上下文引用非静态类项 结果: 编辑: 我调用的是类而不是方法。这项工作: 迭代器it=deq。迭代器(); 我认为,由于iterator()中返回的实例的类型是ListIterator,因此我需要使用该类型声明“it”。

    • 我试图为自己的泛型类编写自己的迭代器。我一直在看几个YouTube教程,在网上搜索。 IntelliJ指出的问题是,我不能像我试图的那样在迭代器类中使用getleft和getright,因为非静态方法不能从静态上下文中引用。我一直在研究静态和更多,但无法解决这个问题。我是完全走错了路,还是至少我的方法有点接近? 运行时: 我遇到了一个无休止的循环,打印5。因此,迭代器本身可以工作,但我的方法有一个

    • 假设我有3个要关闭的Scanner实例。 我可以做 对于每个扫描仪。 或者我可以做类似的事情 使用Java8有没有更简单的方法? 类似的东西?