5

実装を見てきましたが、オフセットがある理由がわかりません。重要だと思います。

私は Sedgewick が教えるアルゴリズムのコースを受講しており、今は文字列について話しています。講義の中で、彼は String の実装について簡単に説明しましたが、オフセットがある理由については触れていません (注: 講義がオンラインでなければ、私は間違いなく尋ねたはずです)。

実装内で文字列を作成すると、オフセットが与えられるように見えますが、なぜオフセットが必要なのか理解できないようです。部分文字列の目的であっても、オフセットがある理由についてはよくわかりません。たとえば、どうやら string を作成した場合"David"、それは実際には['X', 'X', 'D', 'a', 'v', 'i', 'd', 'X']、またはその性質のものであり、s によってオフセットされ'X'ます。どうしてこれなの?

4

2 に答える 2

5

これは、文字列を別の長い文字列 (substring() と同様) から派生させる必要がある場合に役立ちます。

この場合、メモリを節約し、パフォーマンスを最適化するために、オフセットと長さを調整しながら、同じ (不変の) バッキング配列を使用できます。

これはJDK7では当てはまりません。

于 2013-11-11T03:43:21.153 に答える
1

オフセットは通常、最適化として存在します。たとえば、文字配列関連のアイテムでは、同じ文字配列を複数回使用して、配列から複数の文字列を構築できます。これは、オフセットと長さが異なる同じ配列を使用するためです。

これは非常に効果的な最適化です。ゼロ インデックスで開始したい文字を取得するためだけに新しい文字配列を作成する必要がなくなるからです。たとえば、(おそらくソケットから) バイトのブロックを読み取った後、不必要なバイトのコピーを行うことなく、文字列サイズのメッセージにチャンクアップできます。

于 2013-11-11T03:44:27.597 に答える