为什么我无法在链接列表中使用DescendingIterator?

时间:2017-11-06 11:25:26

标签: java android linked-list

我有以下代码段,负责阅读 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 的方式?

enter image description here

1 个答案:

答案 0 :(得分:2)

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

由于您使用LinkedList封装了Collections.synchronizedList实例,因此您无法再直接访问LinkedList实例,也无法执行LinkedList具体方法

因此,您无法拨打descendingIterator

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

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

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

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