1

Javaでファイルから数字の列を読みたい. 例えば:

945
922
922
480
480
819
819
289
386

TreeMapこれらの数字をキーとして入れたいと思います。各キーの値は、その行の番号になります。したがって、マップは次のようになります。

{(945:1),(922:2,3),(480:4,5)}

上記を試していますが、エラーが発生します。

ArrayList<Integer> clusterNums = new ArrayList<>();
String clusterLine;
TreeMap<Integer, ArrayList<Integer[]>> clusterMap = new TreeMap<Integer, ArrayList<Integer[]>>();
while ((clusterLine = clusterFile.readLine()) != null) {
                clusterNums.add(Integer.parseInt(clusterLine));
             }
for (int i = 1; i < clusterNums.size(); i++){
      if (!clusterMap.containsKey(clusterNums.get(i-1))) {
           clusterMap.put(clusterNums.get(i-1), new ArrayList<Integer[]>());
         }
      clusterMap.get(clusterNums.get(i-1)).add(i);
 }

教えていただけますか?

ありがとう。

4

3 に答える 3

2

それ自体が 1 次元を保持するコンテナーであるArrayList<Integer[]>ため、使用しないでください。代わりに、以下のように使用します。ArrayListline numbers

TreeMap<Integer, ArrayList<Integer>> clusterMap = new TreeMap<Integer, ArrayList<Integer>>();

ArrayListファイル内の特定の番号の行番号が含まれます。

現在の番号が であると仮定します:num での存在を確認しますclusterMap:

if(clusterMap.containsKey(num )){
     clusterMap.get(num).add(lineNumber);
}
else{
    ArrayList<Integer> list = new ArrayList<>();
    list.add(lineNumber);
    clusterMap.put(num, list);
}
于 2013-11-14T19:23:19.200 に答える
1

問題文で説明されているように、マップ内の値は 1 次元のデータ構造である必要があります。ArrayList<Integer[]>配列のリスト、2D 構造体を使用しています。

于 2013-11-14T19:25:33.063 に答える
0

複数の値にマップしますか? これはマルチマップと呼ばれます。

私はこれをお勧めします: Guava TreeMultiMap

基本的に、値はそのキーに関連付けられた値の配列リストです。
guava ライブラリをインクルードするだけで、独自のマルチマップ実装を作成しようとする代わりに、非常にすっきりときれいになります。

于 2013-11-14T19:29:25.050 に答える