java中编程难题的内存管理

时间:2013-07-11 00:31:53

标签: java memory-management

我正在尝试解决一个有趣的编程难题

  

电影租赁店有几位访客,想租电影。每个人最多可以租2部电影。然而,租赁代理商只能租用每部电影的1份。为了解决这个问题,租赁机构要求每个人提供他们想租的电影愿望清单。每个人可以提供多达10个愿望。   根据人们提供的愿望清单,租赁代理商想要提出一个解决方案,以便每个人都可以给出独特的电影租赁。

     

输入:
  包含两列的文本文件
  column1有perosn Id,column2有他们想租的电影ID   每个人最多可以有10个条目,文件可能无法排序。

     

解决方案

     
      
  1. 逐行阅读整个文件,并创建人物与所要求的电影列表的地图。
  2.   
  3. 根据所请求的电影数量对地图中的条目进行排序。
  4.   
  5. 遍历已排序的列表,如果该特定影片未分配给其他任何人,则从列表中为一个人分配最多2部电影(为此目的使用HashSet)。
  6.   

此算法适用于合理大小的文件。但是如果输入文件非常大,我会收到内存不足的错误。具体来说,在尝试将数据存储在地图中时。 我可以采取其他方法吗?可能会在内存中读取整个文件。

1 个答案:

答案 0 :(得分:1)

  

可能会在内存中读取整个文件。

是的,当然。逐行阅读。

BufferedReader br = new BufferedReader(new FileReader(file));
while(br.ready()) {
    String line = br.readline();
    // do something with line
}
br.close();

现在,如果你的地图不适合内存,那么你有一个非常不同的问题。但你没有说是这种情况,所以我认为不是。

编辑:如果您无法将整个地图存储在内存中,请使用轻量级本地数据库,例如SQLite。这就是他们的目的。