【发布时间】:2015-12-23 23:27:52
【问题描述】:
我有一个返回哈希图列表的方法(数据来自 ResultSet)。 在尝试使用迭代器循环数据并将其转换为字符串数组时,我发现代码不起作用 - 在循环时似乎丢失了一半的数组数据。
当交换它以使用 for 循环而不是迭代器时,数据不会丢失。我尝试同时使用 Iterator() 和 ListIterator() 均无济于事
这是我的原始代码(不起作用):
public String[][] getLayoutEdges() throws SQLException {
ArrayList<String[]> returnArray = new ArrayList<>();
List<HashMap> layoutEdges = db.getLayoutEdgesFromDatabase();
ListIterator<HashMap> edgesIterator = layoutEdges.listIterator();
while(edgesIterator.hasNext()) {
ArrayList<String> tmpList = new ArrayList<>();
tmpList.add(edgesIterator.next().get("fromnode").toString());
tmpList.add(edgesIterator.next().get("tonode").toString());
tmpList.add(edgesIterator.next().get("distance").toString());
String[] tmpStr = new String[tmpList.size()];
returnArray.add(tmpList.toArray(tmpStr));
}
String[][] rtn = new String[returnArray.size()][returnArray.size()];
return returnArray.toArray(rtn);
}
下面是有效的代码:
public String[][] getLayoutEdges() throws SQLException {
ArrayList<String[]> returnArray = new ArrayList<>();
List<HashMap> layoutEdges = db.getLayoutEdgesFromDatabase();
for(HashMap tmp : layoutEdges) {
ArrayList<String> tmpList = new ArrayList<>();
tmpList.add(tmp.get("fromnode").toString());
tmpList.add(tmp.get("tonode").toString());
tmpList.add(tmp.get("distance").toString());
String[] tmpStr = new String[tmpList.size()];
returnArray.add(tmpList.toArray(tmpStr));
}
String[][] rtn = new String[returnArray.size()][returnArray.size()];
return returnArray.toArray(rtn);
}
谁能告诉我为什么迭代器不工作?我可以使用 for 循环,但我一生都无法弄清楚为什么我编写的原始迭代器代码没有保留我的所有数据。想知道我是否遗漏了一个步骤,或者我是否尝试使用错误的解决方案。
【问题讨论】:
标签: java arraylist iterator hashmap