HashMapsに奇妙な状況があります。HashMapのkeySet()を反復処理しているときに、値が重複しています。そして、値を取得しようとしている間、私はNULLを取得しました。
これが私のHashMap実装です:
import java.util.ArrayList;
import java.util.HashMap;
public class StreetsMap extends HashMap<String, ArrayList<String[]>> {
public void put(String key, String[] data) {
ArrayList<String[]> current = get(key);
if (current == null) {
current = new ArrayList<String[]>();
super.put(key, current);
}
current.add(data);
}
}
CSVファイルから行を読み取っているときに、HashMapに値を入力しています。
私はCSVでこのようなものを持っています(元のリストははるかに長いです):
Location_Code、Street_Name、Start、End、OddEven
01001, JustAStreet ST, 1, 11, odd
01001, JustAStreet ST, 17, 47, odd
... more of this
01001, JustAStreet ST, 2, 30, even
01001, JustAStreet ST, 40, 80, even
01001, AnotherStreet ST, 3, 27, odd
01001, AnotherStreet ST, 9, 51, odd
... and even more
01001, AnotherStreet ST, 0, 50, even
01001, AnotherStreet ST, 2, 14, even
01001, AnotherStreet ST, 0, 100, even
行をコンマで分割し、値をトリミングして、HashMapにデータを入力しています。
String[] lines = inputText.split("\n");
StreetsMap streetsData = new StreetsMap(); //
for (String line : lines) {
String[] newLine = line.split(",");
String[] streetData = new String[4];
streetData[0] = newLine[0].trim(); // Location code
streetData[1] = newLine[2].trim(); // Start
streetData[2] = newLine[3].trim(); // End
streetData[3] = newLine[4].trim(); // OddEven
streetsData.put(newLine[1].trim(), streetData);
そして、問題はここから始まります。keySet()を反復処理する場合:
for (String name : streetsData.keySet()) {
System.out.println(name);
}
私は次のようなものを持っています:
- JustAStreet
- AnotherStreet
- AnotherStreet
- JustAStreet
- JustAStreet
HashMapを介した反復中に.get(key)メソッドを使用してデータにアクセスしようとすると、nullになることがあります。だから私は価値を失っています。:(
私の質問は、HashMapに重複したキーがあるのはどうして本当なのかということです。私が間違っていること。
UPD:キーはユニークです。別のクラスで問題が見つかりました。