[Java] À propos de String et StringBuilder

Résumé avec Mokuji

C'est un mémo pour moi pour étudier

--À propos de la différence entre String et StringBuilder en premier lieu --À propos de stringsbuilder est égal à

La conclusion est --StringBuilder est recommandé lors de la jonction et du retournement

Contexte

Récemment, j'étudie la grammaire Java en utilisant le problème AtCoder.

ABC146 F -Sugoroku C'est une histoire qui commence lorsque je suis tombé sur quelque chose appelé StringBuilder lorsque je voulais inverser String lorsque je suis tombé sur.

Différence entre String et StringBuilder

Vous pouvez facilement comprendre cela en regardant le lien ci-dessous. https://qiita.com/shunsuke227ono/items/e8f34c67dcffa0fa28ad https://www.javadrive.jp/start/stringbuilder/

Pour résumer brièvement

--String est immuable et StringBuilder est modifiable --String peut également être décrit comme mutable dans le code (S = S + "a" etc.) --StringBuilder est plus efficace en termes de mémoire et de temps pour ajouter et insérer des chaînes

Il semble donc que l'utilisation de StringBuilder soit recommandée, mais ** je n'ai vu aucun avantage du côté String **, alors? Est-ce un enfant qui n'a pas besoin de String? (Probablement pas).

――― 02/02/2020 postscript ――― (Le titre a également été changé) Il a souligné dans les commentaires et introduit ↓ de bons liens ↓. https://qiita.com/yoshi389111/items/67354ba33f9271ef2c68

Il ne semble y avoir aucun problème avec l'opérateur + lors de la combinaison de constantes de chaîne ou lors de la combinaison avec une instruction. Si vous souhaitez inverser la chaîne de caractères comme cette fois, il semble préférable d'utiliser StringBuilder ou List \ <Character >.

Addendum 2 (27/03/2020)

Ajouté parce que j'ai rencontré un problème et des connaissances différents

ABC159 B - String Palindrome Juger si la chaîne de caractères est une circulaire (+ α). J'ai écrit le code avec l'idée de savoir si un StringBuilder et sa version inversée sont identiques.

Code de jugement circulaire (faux)


static boolean checkKaibun(String str){
  StringBuilder t = new StringBuilder(str);
  return (t.equals(t.reverse()));
}

Cela revient toujours vrai dans la mesure où je l'ai essayé moi-même. La cause est que la méthode StringBuilder equals n'a pas été remplacée.

La solution est

  1. Remplacer la méthode d'égalité
  2. Convertissez en chaîne avec toString, puis comparez

Si vous utilisez beaucoup de comparaisons StringBuilder dans votre code, ce serait 1, mais il semble que vous deviez également remplacer la méthode hashCode (voir ci-dessous), ce qui est ennuyeux.

référence https://www.atmarkit.co.jp/ait/articles/0702/20/news103.html

La mise en œuvre en 2 est la suivante.

Code de jugement circulaire


static boolean checkKaibun(String str){
  StringBuilder t = new StringBuilder(str);
  return (str.equals(t.reverse().toString()));
}

Recommended Posts

[Java] À propos de String et StringBuilder
À propos de la classe Java StringBuilder
[Java] Comparaison des chaînes de caractères et && et ||
À propos de la classe Java String
[Java] La partie déroutante de String et StringBuilder
À propos du package Java et de l'importation
Chaîne Java
[Java] À propos de Objects.equals () et examen de la comparaison de chaînes (== et égal à)
[Java] Gestion des chaînes de caractères (classe String et classe StringBuilder)
À propos des méthodes Java statiques et non statiques
À propos de Biocontainers fastqc et Java
[Java débutant] À propos de l'abstraction et de l'interface
Classe StringBuffer et StringBuilder en Java
A propos des types primitifs et des types de référence Java
Etudier Java 8 (String Joiner et Join)
Ceci et cela à propos de Base64 (Java)
[Java] Différence entre StringBuffer et StringBuilder
À propos de l'interface Java
[Java] À propos des tableaux
[Java] Remplissage de la chaîne de caractères
Quelque chose à propos de java
Où est Java
À propos des fonctionnalités Java
À propos des threads Java
Interface [Java]
[À propos de JDBC qui connecte Java et SQL]
Traitement des chaînes Java
À propos de la classe Java
À propos de la relation entre l'opérateur d'égalité de chaîne Java (==) et l'initialisation. Débutants
[Java] Comparaison des méthodes d'opération de la collection et de StringBuilder
Java et JavaScript
À propos des tableaux Java
XXE et Java
À propos de l'héritage Java
J'ai essayé de résumer les méthodes de Java String et StringBuilder
À propos de l'interface, interface java
Chaîne divisée (Java)
À propos de Java Var
À propos de Java Literal
À propos des commandes Java
Conseils de base inconnus de manière inattendue sur StringBuilder [Java / C #]
À propos de la sortie du journal Java
À propos de l'interface fonctionnelle Java
Java, à propos d'un tableau à deux dimensions
À propos de la classe StringBuilder
À propos de la division de classe (Java)
À propos de [Java] [StreamAPI] allMatch ()
Getter et Setter (Java)
[Java] Thread et exécutable
String et stringbuffer et générateur de chaîne
Java vrai et faux
[Java] À propos de la classe Singleton
Littéraux de chaîne et instances
À propos des classes et des instances
Remplacement multiple de chaîne Java
[Java] À propos des classes anonymes
A propos des méthodes de fractionnement (Java)
À propos de gets et gets.chomp
[Java Silver] À propos de l'initialisation
A propos de la liste des baies Java