【问题标题】:Why I am not able to use a DescendingIterator on a Linked List?为什么我不能在链表上使用 DescendingIterator?
【发布时间】:2017-11-06 11:25:26
【问题描述】:

我有以下sn-p代码,负责读取JSON文件并创建双向链表。我正在关注来自官方来源LinkedList的链表API

public void createVerticies() {
        try {

            List<Vertex> doublyLinkedList = Collections.synchronizedList(new LinkedList<Vertex>());

            JSONObject jsonObject = new AssetsFileReader().readJsonInput(context, "data/stations_0.1.json");
            JSONArray statArr = (JSONArray) jsonObject.get("stations_array");
            for (int i = 0; i < statArr.length(); i++) {
                JSONObject jObj = statArr.getJSONObject(i);
                Vertex vertex = new Vertex();
                vertex.setName(jObj.optString("name"));
                vertex.setId(jObj.optInt("vertexId"));
                vertex.setLat(jObj.optString("lat"));
                vertex.setLng(jObj.optString("lng"));
                vertex.setFunctional(jObj.optBoolean("isFunctional"));
                vertex.setEndTerminal(jObj.optBoolean("isEndTerminal"));
                vertex.setVertPrev(jObj.optInt("vertPrev"));
                vertex.setVertNext(jObj.optInt("vertNext"));

                doublyLinkedList.add(vertex.getId() - 1, vertex);

            }


            ListIterator<Vertex> listIterator = doublyLinkedList.listIterator();
            while (listIterator.hasNext()) {
                System.out.println(listIterator.next().getName());
            }

            ListIterator<Vertex> desListIt = doublyLinkedList.descendingIterator // Problem 


        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

但是 IDE 不允许我在这里使用降序迭代器:

 ListIterator<Vertex> desListIt = doublyLinkedList.descendingIterator // Problem 

我创建 linkedlist 的方式是否遗漏了什么?

【问题讨论】:

  • 我不知道是不是问题,但该行末尾缺少分号;
  • @Ivan 我知道,但是我没有包括,因为方法无法识别,不是代码问题!

标签: java android linked-list


【解决方案1】:

LinkedList 有一个descendingIterator,但Collections.synchronizedList 返回一个没有该方法的List 实现。

由于您使用Collections.synchronizedList 包装您的LinkedList 实例,您不再可以直接访问LinkedList 实例,并且您无法执行LinkedList 特定方法。

因此你不能打电话给descendingIterator

也就是说,我不确定你为什么使用Collections.synchronizedList,因为你的List 似乎没有被多个线程共享。

因此,也许你可以简单地改变

List<Vertex> doublyLinkedList = Collections.synchronizedList(new LinkedList<Vertex>());

LinkedList<Vertex> doublyLinkedList new LinkedList<Vertex>();

【讨论】:

  • 所以基本上当我使用同步列表时我没有使用链接列表?但是,即使更改为List&lt;Vertex&gt; doublyLinkedList = new LinkedList&lt;&gt;();,我也看不到降序迭代器。
  • 它不工作,请参考我的问题的新编辑,我添加了一张图片。
  • @User3 那是因为你只能看到List 接口的方法(因为那是你变量的编译时类型)。您可以通过将变量类型更改为 LinkedList&lt;Vertex&gt; 来克服这个问题。
  • 我做到了。请参考我的问题中的编辑!
  • 该死的!我错过了左边的初始数据类型!谢谢它现在有效!
猜你喜欢
  • 2021-05-18
  • 2016-06-28
  • 2018-05-14
  • 2010-11-14
  • 2015-07-27
  • 2015-12-13
  • 2015-06-30
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多