[JAVA] Notiz, um mehrere Werte in HashMap zu haben

Einführung

Arrangements sind veraltet und legen sogar nahe (nicht), wie sie betankt werden können. Ungefähr zu dieser Zeit hatte ich die Möglichkeit, HashMap, insbesondere LinkedHashMap, zu verwenden, also werde ich es selbst aufschreiben. Es tut mir leid für die Grundlagen.

Verwenden

Es gibt verschiedene Arten von Kartensystemen. Es spielt keine Rolle, mit welchem Sie es normal einlegen oder herausnehmen, aber es macht einen großen Unterschied, wenn Sie verwalten, was sich darin befindet.

Name der Unterschied
HashMap Die Reihenfolge von Schlüssel und Wert ist angemessen
Hashtable Schlüssel sind in absteigender Reihenfolge
TreeMap Schlüssel sind in aufsteigender Reihenfolge
LinkedHashMap FIFO,LRU(Bestellung erhalten)

Grundsätzlich einfach setzen und bekommen. Ich mache nichts anderes. Wenn der Schlüssel jedoch denselben Namen hat, ist dies der Fall. Seien Sie also vorsichtig. Selbst wenn der Wert gleich ist, wird er nicht überschrieben, wenn der Schlüssel unterschiedlich ist. Der folgende Code gibt weiterhin so viel aus, wie die Schleife eingestellt ist.

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;
		 //Kartendeklaration
        Map<String, Integer> map = new HashMap<String, Integer>();
        
        //Element zur Karte hinzufügen
        map.put("uni", 1);
        map.put("kura", 2);
        map.put("kurage", 3);
        map.put("nameko", 4);
        map.put("nameko", 5);
        
         //Drehen Sie den Iterator
        Iterator<Map.Entry<String, Integer>> itr = map.entrySet().iterator();
        
        // key,Wert erhalten
        while(true) {
            //Verwenden Sie next, um den Wert zu erhalten
            Map.Entry<String, Integer> entry = itr.next();
            
            //Wenn Sie das Ende erreicht haben, kehren Sie zum Anfang zurück
            if(!itr.hasNext()) {
            	if(loop < 0) {
            		break;
            	}
            	loop--;
            	itr = map.entrySet().iterator();
            	
            }
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
	}

}

Die Einschränkung mit dem obigen Code ist, dass er nicht in der Reihenfolge herauskommt, in der Sie ihn eingegeben haben. Es ist eine normale Karte, also muss es anders sein. Wenn Sie in Schwierigkeiten sind, können Sie LinkedHashMap verwenden. Einzelheiten hierzu finden Sie in den einzelnen Erklärungen.

Habe mehrere Werte

Diesmal ist es ein bisschen, aber ich muss zwei Werte für den Schlüssel haben. Vorerst habe ich festgestellt, dass List in Map gespeichert werden kann. Für mich als Anfänger ist es eine komplizierte und wütende Struktur. Im Gegensatz zu Map wird List mit add eingefügt und mit get erhalten. Das Bild sieht folgendermaßen aus: key = "unikura", value = {1993,25} Als ich dies mit LRU von LinkedHashMap deklarierte, wurde es so

LinkedHashMap


//Das dritte Argument ist wichtig
//false: FIFO (Standard), true: LRU
    LinkedHashMap<String, List<Integer>> Samplekey = new LinkedHashMap<String, List<Integer>>(30, 0.75f, true);
    List<Integer> Samplevalues = new ArrayList<Integer>();

Konzeptionell (ich weiß nicht) der Schnittstelle scheint es normal, separat zu schreiben. Der unten stehende Schreibstil scheint normal zu sein, verwenden Sie ihn also bitte. Karte sieht genauso aus.

List<Datentyp>Listennamen= new ArrayList<Datentyp>(Ursprüngliche Größe); 

An diesem Punkt wurde es notwendig, darüber nachzudenken, wie ** LinkedList ** und ** ArrayList ** richtig verwendet werden. Was ich diesmal versuche, ist, den Inhalt der Liste häufig neu zu schreiben. ** ArrayList ist fortlaufend nummeriert und ermöglicht den wahlfreien Zugriff auf bestimmte Elemente. ** LinkedList kann das nicht, also habe ich mich gefragt, ob es besser wäre, ArrayList zu verwenden.

Schreiben Sie in einer anderen Klasse (endlich hier)


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);

Schließlich

Es tut mir leid, es wurde durcheinander gebracht (obwohl ich es nur wissen muss). Wenn die Anzahl der Werte gering ist, scheint es einfacher zu sein, sie selbst zu schreiben.

Verweise

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

Notiz, um mehrere Werte in HashMap zu haben
Hinweis Nr. 5 "HashMap-Werte haben mehrere Werte unter Verwendung von Klassen" [Java]
Dinge, die in bedingten Ausdrücken zu beachten sind
Wie man Parameter in der link_to-Methode hat
So definieren Sie mehrere orm.xml in Spring4, JPA2.1
# 2 [Anmerkung] Ich habe versucht, neunundneunzig mit Java zu berechnen.
[Java] Hinweise zur Typinferenz in Java 10
8 Entspricht mehreren Argumenten
Debuggen mit Eclipse
Stellen Sie mit aktiviertem SSL in JDBC eine Verbindung zu mehreren MySQL-Instanzen her
So erhalten Sie Werte in Echtzeit mit TextWatcher (Android)
Bereitstellen einer Suchleiste in Rails ~ Führen Sie eine Suche durch, indem Sie mehrere Tabellen verbinden
Ich möchte mehrere Rückgabewerte für das eingegebene Argument zurückgeben