2016-07-22 11 views
0

Ich muss einige Daten aus der Datei lesen und sortieren. Aber wenn ich versuche, containsKey() Methode zu verwenden, funktioniert es nicht und ich habe 2 verschiedene Schlüssel mit der gleichen Füllung. Der Grund, warum ich ein Problem habe, ist, dass die Methode den Objektparametertyp hat und es Links zu Objektvergleich gibt. Aber wie kann ich String-Schlüssel in HashMap vergleichen?HashMap und containsKey() Methode

public class Solution { 
     public static void main(String[] args) throws Exception { 
      BufferedReader reader = new BufferedReader(new FileReader(args[0])); 
      Map<String, Double> map = new HashMap<>(); 
      while (reader.ready()) { 
       String[] ss = reader.readLine().split(" "); 
       String key = ss[0]; 
       String val = ss[1]; 
       double value = Double.parseDouble(val); 
       if (map.containsKey(key)) { 
        map.put(key, map.get(key) + value); 
       } 
       else map.put(key, value); 
      } 

      for (Map.Entry<String, Double> pair : map.entrySet()) 
      { 
       System.out.println(pair.getKey() + " " + pair.getValue()); 
      } 

      reader.close(); 
     } 
    } 

Dies ist, was die oben genannten Programmausgaben:

Sidorov 4.0 
Petrov 3.0 
Ivanov 5.0 
Ivanov 33.0 
+1

Können Sie mehr beschreiben, was "es nicht funktioniert" bedeutet? 'HashMap' und' String' funktionieren tatsächlich, es muss also etwas anderes passieren. Möglicherweise ein Problem mit Ihren Eingabedaten. – markspace

+0

Ihr Programm funktioniert so, wie Sie es beschreiben, es fügt die ähnlichen Zeilen korrekt zusammen. Ich würde erwarten, dass sich etwas in den Eingabedaten unterscheidet, wie zum Beispiel die Zeichenfolge "Ivanov", die nicht mit einer anderen in einer anderen Zeile übereinstimmt. – mvd

Antwort

0
[email protected]:~$ cat sample.csv 
hello 4.0 
hi 3.1 
hello 5.0 
[email protected]:~$ java Solution sample.csv 
hi 3.1 
hello 9.0 

ich Ihren Code auf meiner Seite (Ubuntu Server) getestet haben, und es gab mir das erwartete Ergebnis.

Wenn Ihr Schlüssel eine Instanz der Klasse A anders als String ist, haben Sie hashCode() und equals() Methode für die Klasse A. außer Kraft zu setzen

HashMap speichert alle Elemente in Eimern basierend auf den Schlüsseln Objekte, speichert es Element in spezifischer Bucket basierend auf dem Hash-Code-Wert des Objekts. Wenn zum Beispiel zwei Objekte a1 und a2 denselben Hash-Code-Wert haben, werden sie in die gleiche Bucket-Liste aufgenommen. Wenn Sie a1 abrufen, überprüft der Hash-Code zunächst den richtigen Bucket und iteriert dann die Elementliste und vergleicht die Gleichheit des Objekts mit equals

+0

Ok, Danke für die Erklärung! –