java,给定一个hashmap,如何根据频率(以hm为单位)将hm数字组织成一个新的数组?

eqqqjvef  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(315)

给定一个有键值的hm,值=重复次数。
我们按最高频率到最低频率排序。如果两个元素有相同的频率,我们按增加值排序。
现在我想把这个hm,按照数字频率(相同的数字重复了多少次)对它进行排序,然后把它放到一个新的数组中。下面是我构建的函数(但不起作用),如何修复它,甚至提高效率?

public static void findMostFrequent(int[] ar,HashMap<Integer, Integer> t) {
    int frequency=ar[0],k=0;
    for(int i: t.keySet()) {
        for(int j: t.keySet()) { //string(word):all the values together
              if(t.get(j)> frequency) {
                frequency=t.get(j);
                for(int l=k;l<t.get(j);l++ ) {
                    ar[k]=frequency;
                    k++;
                }
                t.remove(frequency);
              }
              }
    }
}

示例:给定hm(hashmap)- {2=1, 3=3, 5=2, 7=2, 9=1} 我希望新数组(称为ar)为: (3,3,3,5,5,7,7,2,9) 基本上,从最频繁的数字到最不频繁的单词,所以如果3被重复了3次并且是重复次数最多的数字,那么在新的数组中(3,3,3)等等。。。我们将不胜感激

ygya80vv

ygya80vv1#

我想到的一个解决方案是首先按如下值对hashmap排序:

Map<Integer, String> sortedMap = 
unsortedMap.entrySet().stream()
.sorted(Entry.comparingByValue())
.collect(Collectors.toMap(Entry::getKey, Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new))

然后迭代新的linkedhashmap以生成结果数组。

qc6wkl3g

qc6wkl3g2#

使用treemap<integer,integer>
将频率设为键,这样treemap保持排序顺序。
遍历键集并收集值。
如果您没有使用treemap的选项。可以在方法中将其转换为treemap。
举个例子:

public static void findMostFrequent(int[] ar, HashMap<Integer, Integer> t) {
        TreeMap<Integer, Set<Integer>> sortedByVal = new TreeMap<>(Comparator.reverseOrder());

        int size=0;
        for (int key : t.keySet()) {
                int val = t.get(key);
                sortedByVal.putIfAbsent(val, new HashSet<>());

                Set<Integer> keys = sortedByVal.get(val);
                keys.add(key);
                sortedByVal.put(val, keys);
                size+=val;
            }

        ar = new int[size];
        int i = 0;
        for (Integer key : sortedByVal.keySet()) {
            for (int val : sortedByVal.get(key)) {
               for (int j = 0; j < key; j++) {
                  ar[i++] = val;
               }
            }
        }
    }

相关问题