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.
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[]
对 equals
和 hashcode
ist einfacher.
Workaroundhashmap
equals
und hashcode
zu verwenden, also byte[] b1 = {1, 2, 3} byte[] b2 = {1, 2, 3}
string
stimmt nicht mit list<byte>
hashcode
和 equals
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());
false 1671711 11394033
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); } }
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.
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!