2

Javaサブリストがリストのインスタンスを返さず、リストのビューを返すという問題に遭遇しました。その結果、スレッドがスタックしました。

私はグーグルをして、これを見つけまし

4

2 に答える 2

7

はい、List.subList文書化されているように、ビューを返します:

指定された fromIndex (これを含む) と toIndex (これを含まない) の間のこのリストの部分のビューを返します。(fromIndex と toIndex が等しい場合、返されるリストは空です。) 返されるリストはこのリストに基づいているため、返されるリストの非構造的な変更はこのリストに反映され、その逆も同様です。返されたリストは、このリストでサポートされているすべてのオプションのリスト操作をサポートしています。

そして、はい、ビューのビューにビューを作成することは...悪い考えになる可能性があります。

ただし、この話の教訓は「使用しない」ではなく、subList「呼び出しているメソッドが何をすべきかを確認し、ドキュメントを読む」ことです。

于 2012-03-29T05:24:21.753 に答える
3

ほぼ 8 年前のスレッドです。それでも、私の答えが誰かを助けるかもしれないと信じています。

上記の Jon Skeet が述べたように、subList常に元のリストへの参照を返します。これに対する簡単な修正は、それを新しい ArrayList<> に割り当てることです

例:

List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
x.add(3);
x.add(4);
x.add(5);
List<Integer> y = new ArrayList<Integer>(x.subList(0, 4));
于 2019-11-29T09:42:48.067 に答える