散列表排序

3
我需要根据键排序哈希映射。键是一个字符串(所以我需要按字母顺序进行排序),值是一个整数。我试图在网上搜索,并发现TreeSet一旦放入就会自动排序。能否有人指导我如何将其转换为TreeSet,或者甚至只是使用哈希映射进行排序。
提前感谢。

2
你可以使用TreeMap。你可以使用以Map为参数的构造函数创建TreeMap。 - user2336315
你无法对HashMap进行排序,因为HashMap会无序地存储元素。你首先必须将其转换为另一个数据结构,例如List/Array/TreeMap等。 - quant
1个回答

6

由于哈希表按定义是不排序的映射,所以您需要使用另一个容器。根据您的需求,有几个选项可供选择,其中一些是:

  1. 暂时或替换使用TreeMap而不是HashMap。这将是最好的选择,除非您必须保留哈希表。
  2. 使用TreeSet对键进行排序,然后遍历键并从HashMap中提取值。
  3. 像选项2一样操作,但在迭代过程中填充一个新的LinkedHashMap。这将导致映射按插入顺序返回值,因为使用了排序集。请注意,在向LinkedHashMap添加元素时,任何新元素都将附加到末尾,因为LinkedHashMap仍按插入顺序排序。

1
不,我不是“必须”使用哈希映射,我只是从一开始就使用了它,并意识到它是一个未排序的映射(我有点业余)。因此,如果我用TreeMap代替它,它会自动排序吗? - bawa
@bawa 是的,您添加到TreeMap中的内容会自动排序。 - nullptr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接