Java 如何从地图中获取顶部的M值?

Java 如何从地图中获取顶部的M值?,java,collections,hashmap,max,cycle,Java,Collections,Hashmap,Max,Cycle,所以我在写这个程序,它计算关于Collatz魔咒的不同东西。 基本上,对于一个数字,我计算一个周期及其长度,如下所示: 代表8:[8,4,2,1] 长度:4 现在我想计算到1000 对于每个数字,周期的长度是不同的 例如,43号的循环长度可以大于45号的循环长度 我想以升序得到最大的长度 Like this: Number 1 2 3 6 7 9 1825 27 54 73 97 129 171 231 313 327 649 703 871 Length(N) 0 1 7 8 16 19

所以我在写这个程序,它计算关于Collatz魔咒的不同东西。 基本上,对于一个数字,我计算一个周期及其长度,如下所示:

代表8:[8,4,2,1] 长度:4

现在我想计算到1000

对于每个数字,周期的长度是不同的

例如,43号的循环长度可以大于45号的循环长度

我想以升序得到最大的长度

Like this:
Number    1 2 3 6 7 9 1825 27 54 73 97 129 171 231 313 327 649 703 871
Length(N) 0 1 7 8 16 19 20 23 111 112 115 118 121 124 127 130 143 144 170 178
我把数字放在HashMap中,数字作为键,长度作为值

现在我不知道如何以升序获得最大长度

Like this:
Number    1 2 3 6 7 9 1825 27 54 73 97 129 171 231 313 327 649 703 871
Length(N) 0 1 7 8 16 19 20 23 111 112 115 118 121 124 127 130 143 144 170 178
有没有一个函数可以帮我解决这个问题? 我必须使用循环和更多列表吗


Collections.Max没有任何帮助,因为它只获得一个值,但我需要不止一个值。

您应该使用任何排序算法(如merge),然后从已排序的映射中选择希望获得的金额。

您应该使用任何排序算法(如merge)然后从已排序的映射中选择要获得的数量。

这实际上是对由映射值组成的列表进行排序

返回地图的前m个值,升序:

public static List<Integer> topMValuesAscending(Map<?, Integer> map, int m){
  final List<Integer> values = new ArrayList<Integer>(map.values());
  Collections.sort(values);
  final int valuesCount = values.size();

  return values.subList(valuesCount - m, valuesCount);
}

publicstaticlist-topMValuesAscending(Map这实质上是对由Map值组成的列表进行排序

返回地图的前m个值,升序:

public static List<Integer> topMValuesAscending(Map<?, Integer> map, int m){
  final List<Integer> values = new ArrayList<Integer>(map.values());
  Collections.sort(values);
  final int valuesCount = values.size();

  return values.subList(valuesCount - m, valuesCount);
}

public static List topMValuesAscending(Map)可能将数字放在HashMap中,长度作为键,数字作为值?可能将数字放在HashMap中,长度作为键,数字作为值?