Note n ° 2 "Création d'un historique de recherche avec ArrayList et HashSet" [Java]

introduction

Enregistré parce que j'ai eu du mal dans l'introduction au contrôle des compétences de paiza.

Que veux-tu faire

  1. Entrez plusieurs chaînes de caractères de n'importe quel nombre de caractères et insérez-les dans la liste.
  2. À ce moment-là, si la chaîne de caractères saisie existe déjà dans la liste, supprimez la chaîne de caractères précédente et ajoutez-en une nouvelle.
  3. Sortie du haut dans l'ordre de l'entrée la plus récente.

Code 1

    Scanner sc = new Scanner(System.in);
    List<String> words = new ArrayList<>();
    while(sc.hasNext()) {
        String s = sc.nextLine();

if (words.contains (s)) {// Vérifier s'il est déjà dans la liste et le supprimer s'il existe words.remove(s); } words.add (0, s); // Ajoute la chaîne saisie au début de la liste }

    for(String word : words) {
        System.out.println(word);
    }

Problèmes avec le code 1

-Si vous augmentez ou diminuez la valeur de ArrayList avec remove () ou add (), toutes les valeurs stockées doivent être décalées, donc le traitement prend du temps. -Since contains () of ArrayList recherche également toutes les valeurs de la liste, plus il y a de valeurs stockées, plus le temps de traitement est long.

Solution

-Utilisez HashSet pour rechercher des chaînes de caractères. → Les éléments peuvent être convertis en valeurs de hachage et utilisés pour la recherche, et les valeurs peuvent être trouvées rapidement.

Code 2

Ajoutez toutes les chaînes entrées à la liste et utilisez HashSet pour masquer les doublons. (Je ne le supprime pas vraiment, je suppose qu'il n'y était pas)

    Scanner sc = new Scanner(System.in);

    List<String> words = new ArrayList<>();
    while(sc.hasNext()) {
        String s = sc.nextLine();
        words.add(s);
    }

Collections.reverse (words); // Inverse la liste en sortie de la liste nouvellement entrée

Set usedWords = new HashSet <> (); // HashSet utilisé pour déterminer les chaînes en double dans la liste

    for(String word : words) {

if (! usedWords.contains (word)) {// Détermine s'il a déjà été ajouté à usedWord (duplicate) et affiche si non System.out.println(word); } usedWords.add(word); }

Recommended Posts

Note n ° 2 "Création d'un historique de recherche avec ArrayList et HashSet" [Java]
Mémorandum n ° 4 "Obtenez une chaîne de caractères et décorez-la" [Java]
Préparer un environnement de scraping avec Docker et Java
Histoire de créer une application de gestion de tâches avec Swing, Java
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Communication socket avec un navigateur Web utilisant Java et JavaScript ②
Communication socket avec un navigateur Web utilisant Java et JavaScript ①
Rechercher et exécuter une méthode à partir d'une instance avec traitement (java)
Recherche de priorité de largeur AtCoder ABC 136 D résolue en Ruby, Perl et Java
Créez une énumération haute performance avec des champs et des méthodes comme Java avec JavaScript
Utiliser java avec MSYS et Cygwin
Traçage distribué avec OpenCensus et Java
Installez Java et Tomcat avec Ansible
Sortie PDF et TIFF avec Java 8
[Java] Différence entre array et ArrayList
Crypter avec Java et décrypter avec C #
Un mémorandum avec NTP (chrony) set
Trouvez la classe d'adresse et le type d'adresse à partir de l'adresse IP avec Java [décoction n ° 2]
L'histoire de la création d'un lanceur de jeu avec une fonction de chargement automatique [Java]
[Java] Créez un fichier jar compressé et non compressé avec la commande jar
J'ai écrit une fonction Lambda en Java et l'ai déployée avec SAM
<java> Fractionner l'adresse avant et après l'adresse avec une expression régulière
Comment créer une application avec un mécanisme de plug-in [C # et Java]