【问题标题】:Print the Multivalued data Inside the Hashtable打印哈希表内的多值数据
【发布时间】:2017-12-11 19:27:57
【问题描述】:

我正在从包含给定格式 FILE DATA IMAGE 的电影数据的文件中读取 100 万行数据。

MovieDetails 文件包含简单的 get 和 set 函数

问题 1 我想打印 hashmap 的数据,好像普通方法在这里行不通,我也想打印多个值(movieTitle 和 Genres)。

问题 2 基本上,当我在哈希表中放入 100 万条记录时,它会放入所有键,但每个键都包含相同的值,即最后一个(参见文件数据图像),当我调试它时,它显示 3952(键和值)但在输出中我只得到 1422 但在覆盖我的类 toString() 后它显示我 1539(键和值)。NEW OUTPUT AFTER OVERRIDING 请查看输出图像OUTPUT IMAGE

MoviesTable DEBUG data Image

请向我解释为什么会出现这些错误以及如何更正 谢谢

 MovieDetails mb = new MovieDetails();
        Hashtable<Integer, MovieDetails> moviesTable=new Hashtable<Integer, MovieDetails>();
        try {

            String contentLine;

            br = new BufferedReader(new FileReader("C:/Users/hp/Desktop/movies.dat"));

            while ((contentLine = br.readLine()) != null) {

                mb.setMovieID(Integer.valueOf(contentLine.split("::")[0]));
                mb.setTitle(contentLine.split("::")[1]);
                mb.setGenres(contentLine.split("::")[2]);
                moviesTable.put(mb.getMovieID(), mb);
            }

            for (Entry<Integer, MovieBean> entry : moviesTable.entrySet()) {
                Integer key = entry.getKey();
                MovieBean value = entry.getValue();

                System.out.println ("Key: " + key + " Value: " + value);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)br.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }


**OUTPUT IMAGE**
  [1]: https://i.stack.imgur.com/OZi4e.jpg

【问题讨论】:

  • MovieDetails 类需要重写 toString() 方法。现在它使用默认值。让它输出你想要的。
  • 酷,在覆盖它 toString() 之后,我的第二个问题仍然存在帮助我解决这个问题(我已经用图像更新了它)
  • 我需要查看您的 MovieDetails 课程。尤其是 toString() 方法。

标签: java file bufferedreader


【解决方案1】:

您的 MovieDetails toString 方法应该类似于:

public String toString() {
       return( "" + getTitle() + " " + getGenres() );
}

也移动:

MovieDetails mb = new MovieDetails();

 while ((contentLine = br.readLine()) != null) {
      MovieDetails mb = new MovieDetails();
  (then rest of loop)

【讨论】:

  • 它涵盖了我几乎 75% 的问题,最后一个问题仍然是与 3952 相比,我仍然得到 1522(键和值)。任何想法
  • @SamarthSaxena 我还没有看到你的代码。我对您的问题进行了有根据的猜测,但没有看到我无法回答的代码。如果您需要更多帮助,请发布代码。
猜你喜欢
  • 2021-02-18
  • 2013-04-18
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
相关资源
最近更新 更多