【发布时间】:2020-06-24 19:28:34
【问题描述】:
我正在尝试通过降低频率对给定元素的列表进行排序。如果两个元素具有相同的频率,它们应该以递增的顺序出现。例如,给定输入:[6, 1000, 3, 3, 1000, 6, 6, 6],输出应为:[6, 6, 6, 6, 3, 3, 1000, 1000]。元素也必须就地排序,而不是返回一个新列表。
到目前为止,我已经创建了一个键和值的 HashMap,其中键是元素,值是频率。但我不太确定下一步该做什么:
public static void method(List<Integer> items)
{
int size = items.size();
int count = 0;
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < size; ++i)
{
int item = items.get(i);
if (map.containsKey(item))
{
map.put(item, map.get(item) + 1);
}
else
{
map.put(item, 1);
}
}
List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator()
{
public int compare(Object o1, Object o2)
{
return ((Comparable) ((Map.Entry) (o1)).getValue())
.compareTo(((Map.Entry) (o2)).getValue());
}
});
HashMap sortedMap = new LinkedHashMap();
for (Iterator it = list.iterator(); it.hasNext();)
{
Map.Entry entry = (Map.Entry) it.next();
sortedMap.put(entry.getKey(), entry.getValue());
}
}
【问题讨论】:
-
如果两个不同频率出现相同次数的顺序是什么?
-
不要使用原始类型。你开始得体,但在中间的某个地方迷失了方向。考虑一下这个 - “您需要按 value 以 reverse order 和 然后按键 对条目进行排序碰撞。”
-
@WJS 我认为问题陈述清楚地总结在行 “我正在尝试通过降低频率对给定元素的列表进行排序。如果两个元素具有相同的频率,它们应该出现以递增的顺序。” 然后示例输出
[6, 6, 6, 6, 3, 3, 1000, 1000]进一步澄清了它。
标签: java sorting hashmap frequency comparator