3
votes

Comment fonctionne exactement la méthode CharBuffer equals ()?

Je ne comprends pas les détails particuliers du fonctionnement de la méthode CharBuffer equals () .

Je ne comprends pas cette phrase "considérée indépendamment de leurs positions de départ": < / p>

Deux tampons de caractères sont égaux si et seulement si ,

Ils ont le même type d'élément,

Ils ont le même nombre d'éléments restants, et

Les deux séquences d'éléments restants, considérées indépendamment de leurs positions de départ sont égales par point.

J'étudie ces bons exemples - plus d'exemples , mais je ne comprends pas l'idée.

Quelqu'un pourrait-il expliquer avec des mots différents et avec un exemple de code perspicace minimal?

En particulier, je trouve cela étrange:

< pré> XXX


0 commentaires

3 Réponses :


2
votes

Les CharBuffer sont comparés en fonction de leur contenu restant . Cela signifie que la vérification equals () commence à partir de la position actuelle du tampon et non du début du tampon. Selon Buffer.position () :

La position d'un tampon est l'index du prochain élément à lire ou à écrire. La position d'un tampon n'est jamais négative et n'est jamais supérieure à sa limite.

Certaines méthodes comme put (char) changeront la position du tampon:

CharBuffer cb1 = CharBuffer.allocate(10);
cb1.put((char) 0);
cb1.put((char) 0);
cb1.put((char) 0);
cb1.put((char) 0);
cb1.put('a');
cb1.put('b');
// put(char) increments position so we need to rewind
cb1.rewind(); 

CharBuffer cb2 = CharBuffer.allocate(10);
cb2.put(4, 'a');
cb2.put(5, 'b');

System.out.println(cb1.equals(cb2)); // true, 0000ab0000 equals 0000ab0000

Dans votre exemple après cb1 .rewind () le premier tampon est ab00000000 tandis que le second tampon est 0000ab0000 . L'appel de cb2.rewind () n'est pas nécessaire car put (char, int) ne change pas la position du tampon:

CharBuffer cb1 = CharBuffer.allocate(10);
cb1.put('a'); // increments position
cb1.put('b'); // increments position

CharBuffer cb2 = CharBuffer.allocate(8);

System.out.println(cb1.equals(cb2)); // true, 00000000 equals 00000000


0 commentaires

3
votes

Les deux séquences des éléments restants , considérés indépendamment de leurs positions de départ , sont égales en un point .

  1. En regardant uniquement les éléments restants,
  2. Sans considérer par où ils ont commencé,
  3. Chaque élément d'un tampon doit être égal à l ' élément correspondant de l'autre tampon.

Dans votre exemple, c'est la partie égale par point qui est importante:

      0 1 2 3 4 5 6 7 8 9
cb1 = a b 0 0 0 0 0 0 0 0
cb1 = 0 0 0 0 a b 0 0 0 0

Comme vous pouvez le voir, en comparant les éléments du tampon char point par point, ils ne correspondent pas.


0 commentaires

0
votes

Voici un exemple qui renvoie true pour deux tampons de tailles différentes:

     0   1   2   3  4   5  6 7 8 9

cb1 'x' 'x' 'a' 'b' 0   0  0 0
             ^
cb2  0   0   0   0 'a' 'b' 0 0 0 0
                    ^

est égal à compare les éléments aux positions 2 à 7 de cb1 aux éléments situés aux positions 4 à 9 de cb2 , et constate qu'ils sont égaux par paire (les deux contiennent les char s suivants - 'a', 'b', 0,0,0,0).

Vous pouvez voir que la position de départ est différente dans les deux tampons (2 vs 4), mais les séquences de les éléments sont les mêmes.

CharBuffer cb1 = CharBuffer.allocate(8);
cb1.put('x'); // moves the current position to 1
cb1.put('x'); // moves the current position to 2
cb1.put(2,'a');
cb1.put(3,'b');
System.out.print(cb1);System.out.println ('|');
CharBuffer cb2 = CharBuffer.allocate(10);
cb2.get (); // moves the current position to 1
cb2.get (); // moves the current position to 2
cb2.get (); // moves the current position to 3
cb2.get (); // moves the current position to 4
cb2.put(4,'a');
cb2.put(5,'b');
System.out.print(cb2);System.out.println ('|');
System.out.println(cb1.equals(cb2));

Lorsque vous commencez à comparer les séquences à partir de la position de départ, vous obtenez deux séquences identiques.

Dans votre exemple, vous êtes comparaison de la séquence 0,0,0,0,0,0,0,0 (la séquence des éléments restants commence à la position 2) à la séquence 0,0,0,0, 'a', 'b', 0, 0,0,0 (la séquence des éléments restants commence à la position 0). De toute évidence, ils ne sont pas égaux les uns aux autres.


0 commentaires