我正在尝试实现一个迭代器,它将遍历 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 ,其中:
- 每个键的值是输入该键的次数。
- 当您遍历 map 时,您将遍历您添加的所有键,每次添加它们时。
您可能想看看他们如何为 HashMap 实现 iterator()
,具体看内部私有(private)类HashIterator
。
next()
和 hasNext()
可能会根据值指定的次数继续返回 key (即如果 "Hello"
映射到 2
,您的自定义 iterator() 将返回 next()
“Hello” 两次,然后移动到下一个键)。
Map 可能不是适合您要执行的操作的结构,但我祝您好运!
关于java - 为 HashMap 创建自定义迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205129/