En PHP, utiliser des tableaux d'octets comme clés de carte est une méthode efficace qui peut améliorer les performances et l'utilisation de la mémoire de votre programme. Les tableaux d'octets en tant que clés ont des vitesses d'accès plus rapides et une consommation de mémoire inférieure à celle des chaînes en tant que clés. En utilisant des tableaux d'octets comme clés, vous pouvez économiser efficacement de l'espace mémoire, en particulier lorsque vous traitez de grandes quantités de données. De plus, les tableaux d'octets peuvent également fournir des opérations de nom de clé plus flexibles, telles que la comparaison de taille, l'interception et l'épissage, etc. Dans l’ensemble, l’utilisation de tableaux d’octets comme clés de carte est une technique utile dans le développement PHP qui peut améliorer les performances et l’efficacité du programme.
Rencontrez-vous des problèmes lors de l'utilisation de tableaux d'octets comme clés de carte ? Je pourrais aussi faire du new String(byte[])
et du hachage via String
, mais utiliser String
执行 new String(byte[])
和哈希,但使用 byte[]
更直接。
问题在于 byte[]
对 equals
和 hashcode
est plus simple.
Solution de contournementhashmap
equals
et hashcode
, donc byte[] b1 = {1, 2, 3} byte[] b2 = {1, 2, 3}
string
ne correspond pas à listdf12804343f5520ff3af5d9f86b34817
hashcode
和 equals
Écrivez votre propre classe wrapper et écrivez
pour consommer le contenu du tableau d'octets.
Tant que vous voulez que seules les références des clés soient égales, ce n'est pas un problème - les tableaux n'implémentent pas "l'égalité des valeurs" comme vous pourriez le souhaiter. Par exemple :
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());Imprimez quelque chose comme ceci :
false 1671711 11394033
byte[]
(Les chiffres réels n'ont pas d'importance ; le fait qu'ils soient différents importe.)
En supposant que vous bytearraywrapper
作为 hashmap
(等)中的键后更改字节数组中的值,您将在再次查找该键时遇到问题...您可以在如果您愿意,可以使用 bytearraywrapper
réellement voulez l'égalité, je vous recommande de créer votre propre wrapper qui contient et implémente l'égalité et la génération de code de hachage de manière appropriée :
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); } }
Veuillez noter que si vous modifiez la valeur dans le tableau d'octets après avoir utilisé bytearraywrapper
comme clé dans bytebuffer
(特别是它的 bytebuffer#wrap(byte[])
方法)。我不知道这是否真的是正确的事情,因为 bytebuffer
(etc.), vous aurez du mal à retrouver la clé... Vous pouvez le faire dans You Vous pouvez utiliser le constructeur bytearraywrapper
si vous le souhaitez, mais c'est évidemment un gaspillage de performances si vous savez que vous ne modifierez pas le contenu du tableau d'octets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!