2016-07-22 14 views
0

ファイルからデータを読み込んでソートする必要があります。しかし、私がcontainsKey()メソッドを使用しようとすると、動作しません。同じフィリングで2つの異なるキーがあります。私が問題がある理由は、メソッドにObjectパラメータ型があり、オブジェクトへのリンクが比較されることです。しかし、HashMapのStringキーを比較するにはどうすればよいですか?私は私の側(Ubuntuのサーバ)上で、あなたのコードをテストしているHashMapとcontainsKey()メソッド

Sidorov 4.0 
Petrov 3.0 
Ivanov 5.0 
Ivanov 33.0 
+1

"それは動作しない"ということをもっと記述できますか? 'HashMap'と' String'は実際に動作しますので、それは何か別のものでなければなりません。入力データに問題がある可能性があります。 – markspace

+0

あなたのプログラムはそれを記述するときに機能し、同様の行を正しく追加します。私は、文字列 'Ivanov'が別の行にある別の文字列と一致しないなど、入力データに何か異なるものがあると思います。 – mvd

答えて

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 

、それは私に期待される結果を与えた:

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

これはどのような上記のプログラムの出力です。

あなたのキーは文字列以外のクラスAのインスタンスである場合は、クラスAのhashCode()equals()方法

HashMapの店舗オブジェクトのキーに基づいてバケット内のすべての要素をオーバーライドする必要があり、それは内の要素を保存しますオブジェクトのハッシュコード値に基づいた特定のバケットたとえば、2つのオブジェクトa1とa2が同じハッシュコード値を持つ場合、それらは同じバケットのリストに入れられ、a1を取得するとまずハッシュコードをチェックして正しいバケットを見つけてから要素リストを繰り返しますオブジェクトの等価性を比較するequals

+0

よろしくお願いします。 –

関連する問題