0

おもちゃのプログラミング言語用のグラフ彩色アロケータを作成しています。スピルコードを生成しているときに、現在の命令の前にロード{復元用}を挿入するか、現在の命令の後に{スピル用}を挿入する必要がある場合があります。私のコードは、各基本ブロックのノードとブロック内の命令のリストを含むグラフとして表されます。

グラフノードのdfs順序付きリストを生成し、各ノードについて、codeList.listIterator()を使用してノード内の命令リストをトラバースし、それぞれnextとpreviousを経由して前後に移動し、挿入後と挿入前に追加を実行できます。

add()メソッドを使用して、リストの先頭でどのように挿入を行う必要がありますか?

4

1 に答える 1

4

ListIterator.add API から

The element is inserted immediately before the element that would be returned by next(), if any, and after the element that would be returned by previous(), if any. (If the list contains no elements, the new element becomes the sole element on the list.) The new element is inserted before the implicit cursor: a subsequent call to next would be unaffected, and a subsequent call to previous would return the new element. 

これが実際にどのように機能するかの例です

    List<String> l = new ArrayList<String>();
    l.add("1");
    ListIterator<String> i = l.listIterator();
    i.add("2");
    while (i.hasPrevious()) {
        i.previous();
    }
    i.add("3");
    System.out.println(l);

出力

[3, 2, 1]

ListIterator を使用してさらに多くのトリックを行うことができます

于 2012-12-03T23:18:34.120 に答える