在 HashMap 上迭代两次 Java
Iterating twice over HashMap Java
我有一个 HashMap 声明为
static HashMap<String,ArrayList<Integer>> inverted_index = new HashMap<String,ArrayList<Integer>>();
我迭代了它的键为
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<String> perms = rotations(temp);
System.out.println(perms.size());
for(int i=0; i<perms.size(); i++)
System.out.println(perms.get(i));
//permuterm_index.put(temp, perms.get(i));
it.remove();
}
}
但是我在调用 createPermutermIndex() 时没有打印 "here"。也就是说,我的迭代器没有迭代 inverted_index.
的条目
有什么方法可以再次迭代它吗?
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
writer.println(pair.getKey() + " " + pair.getValue());
it.remove(); // <- This is your problem
}
您正在删除 条目,同时遍历它们。当循环退出时,您将删除地图中的所有条目。因此,第二个循环什么都不做也就不足为奇了——没有什么可以迭代的了。
您似乎不想在这些循环中删除任何内容,因此只需删除两个循环中的 it.remove()
行即可。
我有一个 HashMap 声明为
static HashMap<String,ArrayList<Integer>> inverted_index = new HashMap<String,ArrayList<Integer>>();
我迭代了它的键为
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<String> perms = rotations(temp);
System.out.println(perms.size());
for(int i=0; i<perms.size(); i++)
System.out.println(perms.get(i));
//permuterm_index.put(temp, perms.get(i));
it.remove();
}
}
但是我在调用 createPermutermIndex() 时没有打印 "here"。也就是说,我的迭代器没有迭代 inverted_index.
的条目有什么方法可以再次迭代它吗?
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
writer.println(pair.getKey() + " " + pair.getValue());
it.remove(); // <- This is your problem
}
您正在删除 条目,同时遍历它们。当循环退出时,您将删除地图中的所有条目。因此,第二个循环什么都不做也就不足为奇了——没有什么可以迭代的了。
您似乎不想在这些循环中删除任何内容,因此只需删除两个循环中的 it.remove()
行即可。