【问题标题】:HashMap Iteration infinite loopHashMap迭代无限循环
【发布时间】:2014-10-31 16:58:48
【问题描述】:
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")));

它不会进入无限循环。

【问题讨论】:

  • 这不会无限循环。 HashMap 中只有这么多(例如,有限数量)键。
  • 无限循环在哪里?您是否尝试过使用调试器单步执行您的代码?

标签: java iterator hashmap iteration


【解决方案1】:

这当然不是无限循环的情况。更有可能的情况是您对 urlConnection 的 openInputStream 操作需要很长时间并且没有超时。

【讨论】:

    【解决方案2】:

    我不认为这是一个无限循环。没有无限循环的可能性,问题应该出在 URL 连接或其他问题上,正如您在删除它时提到的那样,它很好。无论如何,您可以在 BufferedReader 之前和之后 log 以及在循环迭代之后确保问题来自这一行或 while 循环。

    【讨论】:

      【解决方案3】:

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

      url_reader_2.setConnectTimeout(2000);
      

      此外,如果网站上的点击量很大,那么它可能无法处理这么多的 tcp 连接

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-02
        • 2015-03-02
        • 2021-07-10
        • 1970-01-01
        相关资源
        最近更新 更多