我正在創建這個類,它是一個基於哈希映射的自定義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