PHP では、バイト配列をマップ キーとして使用することは、プログラムのパフォーマンスとメモリ使用率を向上させる効率的な方法です。キーとしてのバイト配列は、文字列をキーとして使用するよりもアクセス速度が速く、メモリ消費量が少なくなります。バイト配列をキーとして使用すると、特に大量のデータを扱う場合にメモリ領域を効果的に節約できます。さらに、バイト配列では、サイズ比較、インターセプト、スプライシングなど、より柔軟なキー名の操作も提供できます。全体として、バイト配列をマップ キーとして使用することは、プログラムのパフォーマンスと効率を向上させることができる PHP 開発で役立つテクニックです。
バイト配列をMapキーとして使用することに問題はありますか? new String(byte[])
を実行し、String
経由でハッシュすることもできますが、byte[]
を使用する方が簡単です。
問題は、byte[]
が equals
と hashcode
にオブジェクト識別子を使用しているため、
ハッシュマップで一致しません。 3 つのオプションが表示されます:
でラップされていますが、エンコードの問題に注意する必要があります (バイト -> 文字列 -> バイトが同じバイトを与えることを確認する必要があります)。
を使用します (メモリ消費量が大きい)。
と
equals を作成します。
同様のものを印刷します:
リーリー(実際の数値は無関係です。異なるという事実が重要です。)
実際に
が等価性を望んでいると仮定すると、byte[] を受け取り、等価性とハッシュ コード生成を適切に実装する独自のラッパーを作成することをお勧めします。
リーリー
hashmap
bytearraywrapper を使用した後、バイト配列の値を変更すると、問題が発生することに注意してください。必要に応じて
bytearraywrapper コンストラクターを使用できますが、
がバイト配列の内容を 変更しないことがわかっている場合、これは明らかにパフォーマンスの無駄です。
編集: コメントで述べたように、 bytebuffer
bytebuffer#wrap(byte[])
メソッド) を使用することもできます。 bytebuffer
には必要のない追加機能がすべて含まれているため、これが本当に正しいことなのかどうかはわかりませんが、オプションです。
以上がバイト配列をマップキーとして使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。