Rope に関するあれこれ

http://www.ibm.com/developerworks/jp/java/library/j-ropes/

String との違い

String は、1 つの文字シーケンスとして隣接した領域に保持する。
Rope は、文字シーケンスの連結ノードを保持する。

なので、追加やアクセスの計算量特性が少し違っている。
文字連結のコストが O(1) になり、文字の取得のコストが O(log_n) になる。

Rope の連続した文字シーケンスにアクセスするときは、Iterator を使うとすこし速い。

ただし、文字シーケンスが単独のノードからなる Rope の場合は、charAt が一番速い。

ストリームへの書き込みにおいて、os#write に Rope を渡すと toString を経由するが、これは遅い。

rope.write(os) とすることで、最適な出力が行われる。


挿入テストでは、String の処理時間は指数関数的に増加するのに対して、Rope のそれは O(1) です。


これまでの String を Rope で置き換えることが有効なのは、

大規模な文字列を
少し変更したり、追加したりする

ようなケースです。

内部ノードの数が少なければ、String に対する各種操作はだいたい最悪でも元のままです。