我想从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);
}
你可以告诉我吗?
感谢。
答案 0 :(得分:2)
请勿使用ArrayList<Integer[]>
,因为ArrayList
本身就是容纳您的一维line 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);
}
答案 1 :(得分:1)
地图中的值应该是问题陈述中描述的一维数据结构。您正在使用ArrayList<Integer[]>
这是一个数组列表,一个2D结构。
答案 2 :(得分:0)
您想映射到多个值?这称为MultiMap!
基本上你的值是与该键相关联的值的arraylist 所有你需要做的就是包含番石榴库,它将非常干净整洁,而不是试图创建你自己的多图实现。