HashMap迭代无限循环

时间:2014-09-07 07:02:46

标签: java iterator hashmap iteration

Set<Entry<String, Object>> entryset = full_map.entrySet();
Iterator<Entry<String, Object>> it = entryset.iterator();
while (it.hasNext()) {
    String key = (String) it.next().getKey();
    System.out.println(key);
    Object obj = full_map.get(key);
    JSONObject obj1 = (JSONObject) obj;
    URL url_2 = new URL("http://ws.audioscrobbler.com/2.0/?method=track.getsimilar&artist=" + obj1.getString("artist") + "&track="+obj1.getString("track") + "&limit=10&api_key=XYZ&format=json");
    System.out.println(url_2);
    URLConnection url_reader_2 = url_2.openConnection();
    BufferedReader reader_2 = new BufferedReader(new InputStreamReader((url_reader_2.getInputStream()), Charset.forName("UTF-8")));
    // System.out.println(reader_2);
    String iterator_2 = " ";
/*  while((iterator_2 = reader_2.readLine()) != null)
    {
        JSONObject jsonObject_2 = new JSONObject(iterator_2);
        System.out.println(jsonObject_2);
    }*/


}

上面的代码生成了一个无限循环。有什么建议?? 我尝试使用keySet()而不是entrySet(),它会得到相同的结果。 虽然如果我删除:

BufferedReader reader_2 = new BufferedReader(new InputStreamReader(( url_reader_2.getInputStream()),Charset.forName("UTF-8")));

它不会进入无限循环。

3 个答案:

答案 0 :(得分:0)

这肯定不是无限循环的情况。更可能的情况是你对urlConnection的openInputStream操作需要很长时间而不是超时。

答案 1 :(得分:0)

我不认为这是一个无限循环。没有可能无限循环,问题应该是URL连接或其他东西,正如你提到的,当你删除它,它没关系。无论如何,您可以在log之前和之后以及循环迭代之后BufferedReader来确保问题来自此行或循环。

答案 2 :(得分:0)

我也认为这段代码不是一个无限循环。尝试设置以下超时参数:

url_reader_2.setConnectTimeout(2000);

此外,如果网站上有很多点击,那么它可以坚持处理这么多tcp连接