作者:小文982_412 | 来源:互联网 | 2023-05-21 08:49
我有一个HashMap声明为
static HashMap> inverted_index = new HashMap>();
我重复了它的键
public static void printInvertedIndex() throws FileNotFoundException{
PrintWriter writer = new PrintWriter(new File("InvertedIndex.txt"));
Iterator it = inverted_index.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
writer.println(pair.getKey() + " " + pair.getValue());
it.remove();
}
writer.close();
}
我在一个名为printInvertedIndex()的函数中完成了所有这些操作.现在在其他一些函数中我想再次迭代HashMap,所以我做了这个
public static void createPermutermIndex(){
permuterm_index.clear();
Iterator it = inverted_index.entrySet().iterator();
while (it.hasNext()) {
System.out.println("here");
Map.Entry pair = (Map.Entry)it.next();
String temp;
temp = pair.getKey() + "$";
ArrayList perms = rotations(temp);
System.out.println(perms.size());
for(int i=0; i
但是在调用createPermutermIndex()时我没有打印"here".也就是说,我的迭代器不会迭代invert_index的条目.
有什么方法可以再次迭代它吗?
1> Mattias Buel..:
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
writer.println(pair.getKey() + " " + pair.getValue());
it.remove(); // <- This is your problem
}
您正在迭代它们时删除条目.循环退出时,您将删除地图中的所有条目.因此,第二个循环不做任何事情就不足为奇了 - 没有什么可以迭代的.
在这些循环期间,您似乎不想删除任何内容,因此只需it.remove()
在两个循环中删除这些行.