java编程难题的内存管理

java编程难题的内存管理,java,memory-management,Java,Memory Management,我正在尝试解决一个有趣的编程难题 有几位游客来到电影租赁店,想租电影。每人最多可以租2部电影。然而,租赁公司只能租一部电影。为了解决这个问题,租赁公司要求每个人提供一份他们想要租的电影的愿望清单。每个人最多可以提供10个愿望。 根据人们提供的愿望清单,租赁机构希望拿出一个解决方案,这样每个人都可以得到一个独特的电影租赁 输入: 包含两列的文本文件 column1有perosn Id,column2有他们想租的电影Id。 每个人最多可以有10个条目,文件可能无法排序 解决方案 逐行阅读整个文件,并

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

有几位游客来到电影租赁店,想租电影。每人最多可以租2部电影。然而,租赁公司只能租一部电影。为了解决这个问题,租赁公司要求每个人提供一份他们想要租的电影的愿望清单。每个人最多可以提供10个愿望。 根据人们提供的愿望清单,租赁机构希望拿出一个解决方案,这样每个人都可以得到一个独特的电影租赁

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

解决方案

  • 逐行阅读整个文件,并创建一张个人与所需电影列表的地图
  • 根据请求的电影数量对地图中的条目进行排序
  • 遍历已排序的列表,如果某一特定电影未分配给任何其他人,则从列表中最多为该人分配2部电影(为此使用哈希集)
  • 该算法适用于文件的合理大小。但是如果输入文件很大,我会得到一个内存不足的错误。具体来说,在尝试将数据存储在地图中时。 我还可以采取其他方法吗?可能不需要在内存中读取整个文件

    可能不需要在内存中读取整个文件

    是的,当然。逐行读

    BufferedReader br = new BufferedReader(new FileReader(file));
    while(br.ready()) {
        String line = br.readline();
        // do something with line
    }
    br.close();
    
    现在,如果您的地图无法放入内存,那么您将面临一个非常不同的问题。但你没说是这样,所以我想不是


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

    是的,地图不适合存储在内存中,因为它试图存储所有数据。为了进一步澄清,我想知道是否有一种方法可以避免使用任何其他方法存储整个数据