如何对Hashtable排序并按值选取排名靠前的键值对
实现思路
- 首先取出Hashtable存储的所有键值对(entry)集合
- 以键值对的value为基准做降序排序
- 截取排序后结果的前10位即可,若集合总元素不足10位则直接返回全部元素
若值相同的情况下需要指定额外排序规则(比如按键的字典序排序),只需调整排序逻辑的比较参数即可,无需修改整体流程。
常用语言实现示例
Java 实现
import java.util.*; import java.util.stream.Collectors; public class HashSortDemo { public static void main(String[] args) { Hashtable<String, Integer> hashtable = new Hashtable<>(); // 填充测试数据 hashtable.put("jak",1); hashtable.put("dsf",1); hashtable.put("usd",1); hashtable.put("idb",1); hashtable.put("bla",3); hashtable.put("sdd",1); hashtable.put("asd",2); hashtable.put("bsd",1); // 按值降序排序取前10 List<Map.Entry<String, Integer>> sortedTop10 = hashtable.entrySet() .stream() .sorted(Collections.reverseOrder(Map.Entry.comparingByValue())) .limit(10) .collect(Collectors.toList()); // 输出验证 for (Map.Entry<String, Integer> entry : sortedTop10) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
输出结果:
bla: 3 asd: 2 jak: 1 dsf: 1 usd: 1 idb: 1 sdd: 1 bsd: 1
Python 实现(Python中dict逻辑和Hashtable一致)
# 测试数据 hash_table = { "jak": 1, "dsf": 1, "usd": 1, "idb": 1, "bla": 3, "sdd": 1, "asd": 2, "bsd": 1 } # 按值降序排序取前10 sorted_top_10 = sorted(hash_table.items(), key=lambda x: x[1], reverse=True)[:10] # 输出验证 for k, v in sorted_top_10: print(f"{k}: {v}")
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

