java - 为 HashMap 创建自定义迭代器

标签 java collections iterator hashmap

我正在尝试实现一个迭代器,它将遍历 HashMap 及其副本。例如

string.put("a", 1);
string.put("a", 2);
string.put("b", 3);
string.put("b", 4);

然而,对于我的迭代器,我只迭代了两次,一次是针对值“a”,另一次是针对“b”。我想制作一个迭代器,它将在整个 Map 中迭代 4 次。

编辑:我有点遗漏了很多细节,因为我只是想看看这个迭代器是否可行,但我正在编写的代码实际上是 map 的抽象。例如,我有一个 add 函数,它接受参数 T。所以要添加一个字符串,它看起来像 add("Hello")。通过添加这个字符串,它的键是“String”,它的值为 1。如果我再次调用 add("Hello"),它会将值增加到 2。如果我再次添加它,它会将它的值增加到 3等等。我想创建一个迭代器来遍历我添加的所有内容。

最佳答案

不幸的是,Java 的 Map界面不允许重复键:

An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value.

因此,当您尝试放置映射中已存在的键时,新值会替换旧值;你的迭代器迭代 2 次的原因是因为只有 2 个项目。

如果你想保留重复的键(比如“a”同时指向 1 和 2),你可以有一个 List 或 Set 的 Map,比如

Map<String, List<Integer>> myMap;

键映射到的列表或集合包含所有值,例如 myMap.get("a") 将返回一个看起来像 [1,2]< 的列表.

或者使用来自 Google 的 MultiMap 之类的东西或 Apache


对于你的问题,我相信你是说你想要一个特殊的 map ,其中:

  1. 每个键的值是输入该键的次数。
  2. 当您遍历 map 时,您将遍历您添加的所有键,每次添加它们时。

您可能想看看他们如何为 HashMap 实现 iterator() ,具体看内部私有(private)类HashIterator

next()hasNext() 可能会根据值指定的次数继续返回 key (即如果 "Hello" 映射到 2,您的自定义 iterator() 将返回 next() “Hello” 两次,然后移动到下一个键)。

Map 可能不是适合您要执行的操作的结构,但我祝您好运!

关于java - 为 HashMap 创建自定义迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205129/

相关文章:

java - 分散在多个类中的条件代码的设计模式代码

java - 使用正则表达式查找元组数组的子序列

ruby - array.最多选择n个元素

c++ - 无法取消引用 map const 迭代器的 mapped_type

python - 在使用对 iter 和 while 的调用时,如何将字符串的最后 x 个字符作为 python 生成器删除?

java - 邻接矩阵 DFS 遍历以在有向图 (Java) 中查找从 x 到 y 的路径数

java - jdbc : Could not create connection to database server

c# - 从输入中计算字符时,在输出中获取空格字符

java - key 的 hash code 怎么取决于 Hash map 的容量

c++ - 反向迭代器可以用作普通迭代器吗?