Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从地图中获取3个最高值<;字符串,字符串>;_Java_Sorting_Collections_Map - Fatal编程技术网

Java 从地图中获取3个最高值<;字符串,字符串>;

Java 从地图中获取3个最高值<;字符串,字符串>;,java,sorting,collections,map,Java,Sorting,Collections,Map,我有一张地图,上面有“User1”、“43”等条目。现在我想要一个最高值的“前三名” 使用地图会更容易,但由于技术限制,我只能将地图作为抓取 将映射转换为映射并对其排序的最有效方法是什么?您可以迭代映射的值(使用map.values()),将每个值转换为整数(使用Integer.getInteger(字符串s)),并跟踪您看到的前3个值 或者,您可以如上所述,但不必跟踪前3位,而是创建一个LinkedList并在正确的位置插入每个整数(遍历LinkedList,直到找到整数应该插入的位置)。您可

我有一张
地图
,上面有“User1”、“43”等条目。现在我想要一个最高值的“前三名”

使用
地图
会更容易,但由于技术限制,我只能将地图作为
抓取


映射转换为
映射并对其排序的最有效方法是什么?

您可以迭代映射的值(使用map.values()),将每个值转换为整数(使用Integer.getInteger(字符串s)),并跟踪您看到的前3个值


或者,您可以如上所述,但不必跟踪前3位,而是创建一个LinkedList并在正确的位置插入每个整数(遍历LinkedList,直到找到整数应该插入的位置)。

您可以迭代映射的值(使用Map.values()),将每个值转换为整数(使用Integer.getInteger)(字符串s)),并跟踪您看到的前3个

或者,您可以如上所述,但不必跟踪前3位,而是创建一个LinkedList并在正确的位置插入每个整数(遍历LinkedList,直到找到整数应插入的位置)。

有几种方法:

  • 创建SortedMap,例如带有自定义-匿名-比较器的TreeMap,该比较器通过查找compare()方法调用中获得的键与原始映射中的值来执行比较
  • 使用原始方法中的所有键/值项通过addAll()填充它
  • 观察按值排序的地图
  • 抓住头部/尾部(取决于比较器的排序方式)
  • 与上述类似:

  • 如上所述,使用自定义比较器创建键树集
  • 使用原始贴图的keySet()填充它
  • 抓住钥匙的头部/尾部
  • 从这些键和原始贴图中的值创建新贴图
  • 有几种方法:

  • 创建SortedMap,例如带有自定义-匿名-比较器的TreeMap,该比较器通过查找compare()方法调用中获得的键与原始映射中的值来执行比较
  • 使用原始方法中的所有键/值项通过addAll()填充它
  • 观察按值排序的地图
  • 抓住头部/尾部(取决于比较器的排序方式)
  • 与上述类似:

  • 如上所述,使用自定义比较器创建键树集
  • 使用原始贴图的keySet()填充它
  • 抓住钥匙的头部/尾部
  • 从这些键和原始贴图中的值创建新贴图
  • 要将
    转换为
    ,您可以使用:

     Map<String, Integer> treemap = new HashMap<String, Integer>();
     for (Entry<String, String> entry : entries) {
         treemap.put(entry.getKey(), Integer.parseInt(entry.getValue()));
     }
    
    Map treemap=newhashmap();
    对于(条目:条目){
    treemap.put(entry.getKey(),Integer.parseInt(entry.getValue());
    }
    
    但是,您必须再次迭代映射。如果您不需要整个映射,而只需要前3个,那么您可以简单地迭代条目并通过比较获得前3个

    或者,如果同时需要顶部元素和整个数据,您可以反转键和值,并使用带有比较器的
    树形映射。

    要从
    转换为
    ,您可以使用:

     Map<String, Integer> treemap = new HashMap<String, Integer>();
     for (Entry<String, String> entry : entries) {
         treemap.put(entry.getKey(), Integer.parseInt(entry.getValue()));
     }
    
    Map treemap=newhashmap();
    对于(条目:条目){
    treemap.put(entry.getKey(),Integer.parseInt(entry.getValue());
    }
    
    但是,您必须再次迭代映射。如果您不需要整个映射,而只需要前3个,那么您可以简单地迭代条目并通过比较获得前3个


    或者,如果同时需要顶部元素和整个数据,您可以反转键和值,并使用带有比较器的
    树形图

    您可以将值放入列表中并对其进行排序:

    ArrayList<Integer> highest = new ArrayList<Integer>();
    for (String value : map.values()) {
        highest.add(Integer.parseInt(value));
    }
    Collections.sort(highest);
    for(int i = highest.size() - 1; i >=0 && i > highest.size()-4; i--){
        System.out.println(highest.get(i));
    }
    
    ArrayList highest=new ArrayList();
    for(字符串值:map.values()){
    add(Integer.parseInt(value));
    }
    集合。排序(最高);
    对于(int i=highest.size()-1;i>=0&&i>highest.size()-4;i--){
    System.out.println(最高的get(i));
    }
    

    如果映射非常大,最好遍历它,只选择3个最高的值,而不对整个列表进行排序。

    您可以将这些值放入一个列表中并对其进行排序:

    ArrayList<Integer> highest = new ArrayList<Integer>();
    for (String value : map.values()) {
        highest.add(Integer.parseInt(value));
    }
    Collections.sort(highest);
    for(int i = highest.size() - 1; i >=0 && i > highest.size()-4; i--){
        System.out.println(highest.get(i));
    }
    
    ArrayList highest=new ArrayList();
    for(字符串值:map.values()){
    add(Integer.parseInt(value));
    }
    集合。排序(最高);
    对于(int i=highest.size()-1;i>=0&&i>highest.size()-4;i--){
    System.out.println(最高的get(i));
    }
    
    如果映射非常大,则最好遍历它,只选择3个最高值,而不对整个列表进行排序