我正在创建这个类,它是一个基于哈希映射的自定义Map。我有一个add方法,如果添加一个对象,则该对象将成为关键字,如果该对象当前不在列表中,则其值将为1。但是,如果添加当前在列表中的对象,它的值将会增加1.因此,如果我添加了10个完全相同的字符串,那么键将是该字符串,并且值将是10.我在实践中理解我遍历地图,实际上只有一个对象要迭代,但是,我正在尝试创建一个内部类,它将定义一个迭代器,该迭代器会迭代同一个对象,但其值多次。我可以通过简单地使用for循环来构造一个适当的ArrayList,并为此创建一个迭代器,但效率太低。有没有一个简单或更有效的方法来做到这一点?构建一个自定义迭代器
0
A
回答
1
你可以用两个变量做到这一点:
private T nextObj = null;
private int times = 0;
T next(){
if(times==0){
// get the next object and set the times variable to it's value in the hashmap
}
times--;
return nextObj;
}
0
0
这听起来像你正在实施一个multiset or bag:一组计算每一个独特的元素。由于这是一个学校项目,我将介绍如何去做而不是提供代码。试试你的运气,如果你遇到问题,可以改进你的问题。
当我创建一个使用另一个集合的新集合类型时,我通常在构建迭代器时做同样的事情。
Bag.Iterator
的构造将与来自Map
迭代器初始化。- 正如dtech上面所示,迭代器需要跟踪它正在计数的当前对象以及它应该返回它的次数。
next()
需要在开始时获取下一个对象,并且一旦当前对象用完了计数。hasNext()
必须做同样的事情,而不实际减少计数或抓住下一个对象。
0
我终于明白了。这是我的解决方案。感谢所有回应并给我指点的人。
private int times = 0;
private boolean flag = true;
Iterator<Entry<T, Integer>> it = Bag.entrySet().iterator();
private Entry<T, Integer> t = it.next();
private int value = t.getValue();
private T nextObj = t.getKey();
public boolean hasNext() {
if (times > 0) {
return true;
}
return it.hasNext();
}
public T next() {
if (this.hasNext() == false) {
throw new NoSuchElementException();
}
if (times == 0 && flag == true) {
times = value;
flag = false;
}
if (times == 0 && flag == false) {
t = it.next();
value = t.getValue();
nextObj = t.getKey();
times = value;
}
times--;
return nextObj;
}
相关问题
- 1. 自定义迭代器
- 2. 自定义迭代器
- 3. 将一个自定义迭代器添加到一个javascript类
- 4. 定义迭代器/迭代器构造函数时出错?
- 5. 如何为一副纸牌创建自定义迭代器? (Java)
- 6. 自定义容器的自定义迭代器
- 7. 通过Ember中的自定义构建数组迭代?
- 8. 为自定义类写一个迭代器
- 9. lua自定义目录迭代器
- 10. 自定义迭代器很慢
- 11. 与自定义模板STL迭代器
- 12. 字典的自定义迭代器?
- 13. 自定义容器范围迭代
- 14. 目录迭代器自定义阵列
- 15. 为Spacebars编写自定义迭代器
- 16. 自定义迭代器性能
- 17. 了解实现自定义迭代器
- 18. 自定义迭代器模板
- 19. 自定义模板迭代器参考
- 20. 自定义迭代器和insert_iterator
- 21. 自定义迭代器,其在保存
- 22. C++自定义迭代器构造函数
- 23. 解引用迭代器到自定义结构字段
- 24. HttpWebRequest构建一个自定义请求?
- 25. Python自定义迭代器:通过非序列迭代
- 26. 使用自定义迭代器升压迭代
- 27. SplObjectStorage的自定义迭代
- 28. 如何为Map实现创建自定义迭代器?
- 29. as3:如何创建自定义迭代器
- 30. 创建自定义的迭代器读取连续的文件
我看不到你用nextObj做了什么。你能解释一下这个变量吗? – Isai 2011-03-06 23:17:15
它只是对迭代器要返回的下一个对象的引用。所以不要说“返回某些东西”,而是说“nextObj = something”。如果你还没有构建你自己的迭代器,你可以定义一个迭代器,然后使用Map的Iterator的next()来填充nextObj。 – dtech 2011-03-06 23:21:22