Table des matières
Contenu de la question
解决方法
Maison Java Utilisation de tableaux d'octets comme clés de carte

Utilisation de tableaux d'octets comme clés de carte

Feb 08, 2024 pm 11:51 PM

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.

Contenu de la question

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[]equalshashcode est plus simple.

Solution de contournementhashmap

Le problème est
    d'utiliser des identifiants d'objet pour equals et hashcode, donc
  1. byte[] b1 = {1, 2, 3}
    byte[] b2 = {1, 2, 3}
    Copier après la connexion
    string ne correspond pas à
  2. . Je vois trois options :
  3. list<byte>
  4. est enveloppé dans
  5. , mais vous devez faire attention aux problèmes d'encodage (vous devez vous assurer que byte -> string -> byte vous donne les mêmes octets). hashcodeequals
  6. Utilisez
(consommation de mémoire plus importante).

É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());
Copier après la connexion
Imprimez quelque chose comme ceci :
false
1671711
11394033
Copier après la connexion
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);
    }
}
Copier après la connexion

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.

🎜EDIT : Comme mentionné dans les commentaires, vous pouvez également utiliser les 🎜 avec toutes les fonctionnalités supplémentaires dont vous n'avez pas besoin, mais c'est une option. 🎜

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)