Dalam PHP, menggunakan tatasusunan bait sebagai kekunci Peta ialah kaedah yang cekap yang boleh meningkatkan prestasi dan penggunaan memori program anda. Tatasusunan bait sebagai kunci mempunyai kelajuan akses yang lebih cepat dan penggunaan memori yang kurang daripada rentetan sebagai kunci. Dengan menggunakan tatasusunan bait sebagai kunci, anda boleh menjimatkan ruang memori dengan berkesan, terutamanya apabila memproses sejumlah besar data. Selain itu, tatasusunan bait juga boleh menyediakan operasi nama kunci yang lebih fleksibel, seperti perbandingan saiz, pemintasan dan penyambungan, dsb. Secara keseluruhannya, menggunakan tatasusunan bait sebagai kekunci Peta ialah teknik berguna dalam pembangunan PHP yang boleh meningkatkan prestasi dan kecekapan program.
Adakah anda mendapati sebarang masalah menggunakan tatasusunan bait sebagai kekunci Peta? Saya juga boleh melakukan new String(byte[])
dan cincangan melalui String
, tetapi menggunakan String
执行 new String(byte[])
和哈希,但使用 byte[]
更直接。
问题在于 byte[]
对 equals
和 hashcode
adalah lebih mudah.
Penyelesaianhashmap
byte[] b1 = {1, 2, 3} byte[] b2 = {1, 2, 3}
string
tidak sepadan dalam listdf12804343f5520ff3af5d9f86b34817
hashcode
和 equals
Tulis kelas pembalut anda sendiri dan tulis
untuk menggunakan kandungan tatasusunan bait.
Selagi anda hanya mahu rujukan kunci adalah sama, tidak mengapa - tatasusunan tidak melaksanakan "kesamaan nilai" mengikut cara yang anda mahukan. Contohnya:
byte[] array1 = new byte[1]; byte[] array2 = new byte[1]; system.out.println(array1.equals(array2)); system.out.println(array1.hashcode()); system.out.println(array2.hashcode());Cetak sesuatu seperti ini:
false 1671711 11394033
byte[]
(Nombor sebenar tidak penting; fakta bahawa ia berbeza.)
Andaikan anda bytearraywrapper
作为 hashmap
(等)中的键后更改字节数组中的值,您将在再次查找该键时遇到问题...您可以在如果您愿意,可以使用 bytearraywrapper
sebenarnya inginkan kesaksamaan, saya syorkan anda mencipta pembungkus anda sendiri yang mengandungi dan melaksanakan kesamaan dan penjanaan kod cincang dengan sewajarnya:
public final class ByteArrayWrapper { private final byte[] data; public ByteArrayWrapper(byte[] data) { if (data == null) { throw new NullPointerException(); } this.data = data; } @Override public boolean equals(Object other) { if (!(other instanceof ByteArrayWrapper)) { return false; } return Arrays.equals(data, ((ByteArrayWrapper)other).data); } @Override public int hashCode() { return Arrays.hashCode(data); } }
Sila ambil perhatian bahawa jika anda menukar nilai dalam tatasusunan bait selepas menggunakan bytearraywrapper
sebagai kunci dalam bytebuffer
(特别是它的 bytebuffer#wrap(byte[])
方法)。我不知道这是否真的是正确的事情,因为 bytebuffer
(dsb.), anda akan menghadapi masalah mencari kunci itu semula... Anda boleh melakukannya dalam Anda boleh menggunakan pembina bytearraywrapper
jika anda mahu, tetapi jelas sekali ini adalah satu pembaziran prestasi jika anda tahu anda
Atas ialah kandungan terperinci Menggunakan tatasusunan bait sebagai kekunci Peta. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!