[JAVA] Mémo pour avoir plusieurs valeurs dans HashMap

introduction

Les arrangements sont obsolètes, et il est même suggéré (non) qu'ils puissent être alimentés.À cette époque, j'ai eu l'occasion d'utiliser HashMap, en particulier LinkedHashMap, donc je l'écrirai moi-même. Je suis désolé pour les bases.

Utilisation

Il existe plusieurs types de systèmes cartographiques. Peu importe celui que vous utilisez pour le mettre ou le retirer normalement, mais cela fait une grande différence lorsque vous gérez ce qu'il contient.

Nom la différence
HashMap L'ordre de la clé et de la valeur est approprié
Hashtable les clés sont dans l'ordre décroissant
TreeMap les clés sont dans l'ordre croissant
LinkedHashMap FIFO,LRU(Commande obtenue)

Fondamentalement, il suffit de mettre et d'obtenir. Je ne fais rien d'autre. Cependant, si vous utilisez le même nom pour la clé, ce sera le cas, alors soyez prudent. Même si la valeur est la même, elle ne sera pas écrasée si la clé est différente. Le code ci-dessous continue de sortir autant que la boucle est définie.

Sample.java


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Main {

	public static void main(String[] args) {
		int loop = 50;
		 //Déclaration de carte
        Map<String, Integer> map = new HashMap<String, Integer>();
        
        //Ajouter un élément à la carte
        map.put("uni", 1);
        map.put("kura", 2);
        map.put("kurage", 3);
        map.put("nameko", 4);
        map.put("nameko", 5);
        
         //Tournez l'itérateur
        Iterator<Map.Entry<String, Integer>> itr = map.entrySet().iterator();
        
        // key,Obtenez de la valeur
        while(true) {
            //Utilisez suivant pour obtenir la valeur
            Map.Entry<String, Integer> entry = itr.next();
            
            //Lorsque vous atteignez la fin, revenez au début
            if(!itr.hasNext()) {
            	if(loop < 0) {
            		break;
            	}
            	loop--;
            	itr = map.entrySet().iterator();
            	
            }
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
	}

}

La mise en garde avec le code ci-dessus est qu'il ne sort pas dans l'ordre dans lequel vous l'avez mis. C'est une carte normale, donc elle doit être différente. Si vous avez des problèmes, vous pouvez utiliser LinkedHashMap. Pour plus de détails sur chacun, veuillez lire chaque explication.

Avoir plusieurs valeurs

Cette fois, c'est un peu, mais je dois avoir deux valeurs pour la clé. Pour le moment, j'ai trouvé que List peut être stocké dans Map. Il a une structure compliquée et en colère pour moi en tant que débutant. Contrairement à Map, List est inséré avec add et obtenu avec get. L'image est comme ceci: key = "unikura", value = {1993,25} Quand j'ai déclaré cela avec LRU de LinkedHashMap, c'est devenu comme ça

LinkedHashMap


//Le troisième argument est important
//false: FIFO (par défaut), true: LRU
    LinkedHashMap<String, List<Integer>> Samplekey = new LinkedHashMap<String, List<Integer>>(30, 0.75f, true);
    List<Integer> Samplevalues = new ArrayList<Integer>();

Conceptuellement (je ne connais pas) l'interface, il semble normal d'écrire séparément. Le style d'écriture ci-dessous semble normal, veuillez donc l'utiliser. La carte a la même apparence.

List<Type de données>Liste de noms= new ArrayList<Type de données>(Dimension initiale); 

À ce stade, il est devenu nécessaire de réfléchir à la manière d'utiliser correctement ** LinkedList ** et ** ArrayList **. Ce que j'essaie de faire cette fois, c'est de réécrire fréquemment le contenu de la liste. ** ArrayList est numéroté en séquence, permettant un accès aléatoire à des éléments spécifiques. ** LinkedList ne peut pas faire cela, alors je me suis demandé s'il ne valait pas mieux utiliser ArrayList.

Écrivez dans une autre classe (enfin par ici)


public class Sample {
    private int populality;
    private int freshness;

    public Sample(int populality, int freshness) {
        this.populality = populality;
        this.freshness = freshness;
    }
    public Sample() {
        this.populality = 0;
        this.freshness = 0;
    }
    public int getPopulality() {
        return populality;
    }
    public void setPopulality(int populality) {
        this.populality = populality;
    }
    public int getFreshness() {
        return freshness;
    }
    public void setFreshness(int freshness) {
        this.freshness = freshness;
    }
}
private LinkedHashMap<String, Sample> Map = new LinkedHashMap<String, Sample>(30, 0.75f, false);
Sample info = this.Map.get(kename);
int Freshness = info.getFreshness();
int getPopulality = info.getPopulality();
info.setFreshness(0);
info.setPopulality(0);

finalement

Je suis désolé, il a été foiré (même si je n'ai besoin que de savoir) Si le nombre de valeurs est petit, il semble plus facile de l'écrire par vous-même.

Les références

http://kaworu.jpn.org/kaworu/2008-04-10-2.php https://code.i-harness.com/ja-jp/q/7d9261 https://www.task-notes.com/entry/20160402/1459595902 https://qiita.com/BumpeiShimada/items/522798a380dc26c50a50

Recommended Posts

Mémo pour avoir plusieurs valeurs dans HashMap
Note n ° 5 "Les valeurs HashMap ont plusieurs valeurs utilisant des classes" [Java]
Points à noter dans les expressions conditionnelles
Comment avoir des paramètres dans la méthode link_to
Comment définir plusieurs orm.xml dans Spring4, JPA2.1
# 2 [Note] J'ai essayé de calculer quatre-vingt-dix-neuf avec Java.
[Java] Points à noter sur l'inférence de type étendue dans Java 10
8 Correspond à plusieurs arguments
Pour déboguer avec Eclipse
Connectez-vous à plusieurs instances MySQL avec SSL activé dans JDBC
Comment obtenir des valeurs en temps réel avec TextWatcher (Android)
Fournir une barre de recherche dans Rails ~ Effectuer une recherche en joignant plusieurs tables
Je souhaite renvoyer plusieurs valeurs de retour pour l'argument saisi