Rumah  >  Artikel  >  Menggunakan tatasusunan bait sebagai kekunci Peta

Menggunakan tatasusunan bait sebagai kekunci Peta

王林
王林ke hadapan
2024-02-08 23:51:301015semak imbas

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.

Kandungan soalan

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[]equalshashcode adalah lebih mudah.

Penyelesaianhashmap

Masalahnya ialah
    menggunakan pengecam objek untuk sama dan kod cincang, jadi
  1. byte[] b1 = {1, 2, 3}
    byte[] b2 = {1, 2, 3}
    string tidak sepadan dalam
  2. . Saya nampak tiga pilihan:
  3. listdf12804343f5520ff3af5d9f86b34817
  4. dibalut dengan
  5. , tetapi anda perlu berhati-hati tentang isu pengekodan (anda perlu memastikan bait -> rentetan -> bait memberi anda bait yang sama). hashcodeequals
  6. Gunakan
(penggunaan memori yang lebih besar).

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

tidak akan🎜menukar kandungan tatasusunan bait. 🎜 🎜EDIT: Seperti yang dinyatakan dalam ulasan, anda juga boleh menggunakan 🎜 dengan semua ciri tambahan yang anda tidak perlukan, tetapi ia adalah pilihan. 🎜

Atas ialah kandungan terperinci Menggunakan tatasusunan bait sebagai kekunci Peta. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Fungsi pencetus RESTfulArtikel seterusnya:Fungsi pencetus RESTful