ホームページ  >  記事  >  バイト配列をマップキーとして使用する

バイト配列をマップキーとして使用する

王林
王林転載
2024-02-08 23:51:301060ブラウズ

PHP では、バイト配列をマップ キーとして使用することは、プログラムのパフォーマンスとメモリ使用率を向上させる効率的な方法です。キーとしてのバイト配列は、文字列をキーとして使用するよりもアクセス速度が速く、メモリ消費量が少なくなります。バイト配列をキーとして使用すると、特に大量のデータを扱う場合にメモリ領域を効果的に節約できます。さらに、バイト配列では、サイズ比較、インターセプト、スプライシングなど、より柔軟なキー名の操作も提供できます。全体として、バイト配列をマップ キーとして使用することは、プログラムのパフォーマンスと効率を向上させることができる PHP 開発で役立つテクニックです。

質問内容

バイト配列をMapキーとして使用することに問題はありますか? new String(byte[]) を実行し、String 経由でハッシュすることもできますが、byte[] を使用する方が簡単です。

解決策

問題は、byte[]equalshashcode にオブジェクト識別子を使用しているため、

リーリー

ハッシュマップで一致しません。 3 つのオプションが表示されます:

  1. string でラップされていますが、エンコードの問題に注意する必要があります (バイト -> 文字列 -> バイトが同じバイトを与えることを確認する必要があります)。
  2. list を使用します (メモリ消費量が大きい)。
  3. 独自のラッパー クラスを作成し、バイト配列の内容を使用するために
  4. hashcodeequals を作成します。
キーの参照を等しくしたいだけであれば、それで問題ありません。配列は、あなたが望むような「値の等価性」を実装しません。例えば:### リーリー

同様のものを印刷します:

リーリー

(実際の数値は無関係です。異なるという事実が重要です。)

実際に

が等価性を望んでいると仮定すると、

byte[] を受け取り、等価性とハッシュ コード生成を適切に実装する独自のラッパーを作成することをお勧めします。 リーリー hashmap

(など) のキーとして

bytearraywrapper を使用した後、バイト配列の値を変更すると、問題が発生することに注意してください。必要に応じて bytearraywrapper コンストラクターを使用できますが、 がバイト配列の内容を 変更しないことがわかっている場合、これは明らかにパフォーマンスの無駄です。 編集: コメントで述べたように、 bytebuffer

(具体的には

bytebuffer#wrap(byte[]) メソッド) を使用することもできます。 bytebuffer には必要のない追加機能がすべて含まれているため、これが本当に正しいことなのかどうかはわかりませんが、オプションです。

以上がバイト配列をマップキーとして使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。