排序Map <integer,list <double>&gt; </integer,list <double>

时间:2014-01-16 11:33:07

标签: java sorting hashmap

基于Map<Integer,List<Double>> dist,我应该创建int[][] indexes,它将按升序存储已排序的索引,例如:

dist = 
0, [2.5, 3.5, 8.4]
1, [1.0, 5.0, 6.2]

int[][] indexes =
1,0                  // refers to 1.0 in dist, because it's a smallest value
0,0,                 // refers to 2.5 in dist
0,1,
1,1,
1,2
0,2                  // refers to 8.4 in dist

知道怎么做吗?感谢。

2 个答案:

答案 0 :(得分:3)

您可以创建TreeMap<Double,List<IndexClass>>

的反向地图
 class IndexClass {
       public int row;
       public int column;
 }

排序功能如下:

 public List<IndexClass> sort(Map<Integer,List<Double>> dist) {
      //Use TreeMap because it will auto sort keys
      TreeMap<Double,List<IndexClass>> treeMap = new TreeMap<Double,List<IndexClass>>();
      for (Map.Entry<Integer, List<Double>> entry : dist.entrySet()) {
           List<Double> distValues = entry.getValue();
           for (int i = 0; i < distValues.size(); i++) {
                Double value = distValues.get(i);
                IndexClass index = new IndexClass();
                index.row = entry.getKey();
                index.column = i;
                //There is a duplicate value, simple add the index into the list
                if (treeMap.contains(value) {
                     treeMap.get(value).add(index);
                //It is a new value, so create a list instead
                } else {
                     List<IndexClass> indexList = new ArrayList<IndexClass>();
                     indexList.add(index);
                     treeMap.put(value, indexList.add);
                }
           }
      }
      List<IndexClass> finalList = new ArrayList<IndexClass>();
      //Add all list items together
      for (Map.Entry<Double,List<IndexClass>> entry : treeMap.entrySet()) {
           finalList.addAll(entry.getValue());
      }     
      return finalList;
 }

然后你循环通过dist并将它们放入treeMap。

然后你可以打印出treeMap的值。

答案 1 :(得分:1)

是否有可能。

  1. 迭代结构dist,
  2. 创建RankedEntry列表。

    public class RankedEntry实现Comparable {             双重价值;             int rowIdx;             int colIdx;

            public RankedEntry(Double value, int rowIdx, int colIdx) {
                this.value = value;
                this.rowIdx = rowIdx;
                this.colIdx = colIdx;
            }
    
            @Override
            public int compareTo(Object o) {
                return this.value.compareTo((Double)o);
            }
        }
    
  3. 您在java中没有排序列表,但可以使用Collections排序 方法

  4. 然后你可以遍历它给你的这个列表 结构

  5. 获取rowIdx和colIdx并将它们放入int[][] indexes