Inhaltsverzeichnis
Frageninhalt
解决方法
Heim Java Verwendung von Byte-Arrays als Map-Schlüssel

Verwendung von Byte-Arrays als Map-Schlüssel

Feb 08, 2024 pm 11:51 PM

In PHP ist die Verwendung von Byte-Arrays als Map-Schlüssel eine effiziente Methode, die die Leistung und Speichernutzung Ihres Programms verbessern kann. Byte-Arrays als Schlüssel haben schnellere Zugriffsgeschwindigkeiten und weniger Speicherverbrauch als Zeichenfolgen als Schlüssel. Durch die Verwendung von Byte-Arrays als Schlüssel können Sie insbesondere bei der Verarbeitung großer Datenmengen effektiv Speicherplatz sparen. Darüber hinaus können Byte-Arrays flexiblere Schlüsselnamenoperationen bereitstellen, z. B. Größenvergleich, Abfangen und Spleißen usw. Alles in allem ist die Verwendung von Byte-Arrays als Map-Schlüssel eine nützliche Technik in der PHP-Entwicklung, die die Programmleistung und -effizienz verbessern kann.

Frageninhalt

Haben Sie Probleme bei der Verwendung von Byte-Arrays als Map-Schlüssel? Ich könnte auch new String(byte[]) und einen Hash über String erstellen, aber die Verwendung von String 执行 new String(byte[]) 和哈希,但使用 byte[] 更直接。

解决方法

问题在于 byte[]equalshashcode ist einfacher.

Workaroundhashmap

Das Problem besteht darin,
    Objektbezeichner für equals und hashcode zu verwenden, also
  1. byte[] b1 = {1, 2, 3}
    byte[] b2 = {1, 2, 3}
    Nach dem Login kopieren
    string stimmt nicht mit
  2. überein. Ich sehe drei Möglichkeiten:
  3. list<byte>
  4. ist in
  5. eingeschlossen, aber Sie müssen bei Codierungsproblemen vorsichtig sein (Sie müssen sicherstellen, dass Byte -> String -> Byte die gleichen Bytes ergibt). hashcodeequals
  6. Verwenden Sie
(größerer Speicherverbrauch).

Schreiben Sie Ihre eigene Wrapper-Klasse und schreiben Sie

, um den Inhalt des Byte-Arrays zu verbrauchen.

Solange Sie nur möchten, dass die Referenzen der Schlüssel gleich sind, ist das in Ordnung – Arrays implementieren „Wertegleichheit“ nicht auf die Art und Weise, wie Sie es vielleicht möchten. Zum Beispiel:

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());
Nach dem Login kopieren
Drucken Sie etwa so:
false
1671711
11394033
Nach dem Login kopieren
byte[] (Die tatsächlichen Zahlen spielen keine Rolle; die Tatsache, dass sie unterschiedlich sind, schon.)

Angenommen, Sie bytearraywrapper 作为 hashmap (等)中的键后更改字节数组中的值,您将在再次查找该键时遇到问题...您可以在如果您愿意,可以使用 bytearraywrapper tatsächlich wollen Gleichheit, empfehle ich Ihnen, einen eigenen Wrapper zu erstellen, der enthält und Gleichheit und Hash-Code-Generierung entsprechend implementiert:

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);
    }
}
Nach dem Login kopieren

Bitte beachten Sie, dass Sie Probleme haben werden, den Schlüssel wieder zu finden, wenn Sie den Wert im Byte-Array ändern, nachdem Sie bytearraywrapper als Schlüssel in bytebuffer (特别是它的 bytebuffer#wrap(byte[]) 方法)。我不知道这是否真的是正确的事情,因为 bytebuffer (usw.) verwendet haben ... Sie können dies in You tun Sie können den Konstruktor bytearraywrapper verwenden, wenn Sie möchten, aber das ist offensichtlich eine Leistungsverschwendung, wenn Sie wissen, dass Sie den Inhalt des Byte-Arrays nicht ändern werden.

🎜EDIT: Wie in den Kommentaren erwähnt, können Sie 🎜s auch mit allen zusätzlichen Funktionen verwenden, die Sie nicht benötigen, aber es ist eine Option. 🎜

Das obige ist der detaillierte Inhalt vonVerwendung von Byte-Arrays als Map-Schlüssel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)