【问题标题】:Best Java approach for comparing two text files比较两个文本文件的最佳 Java 方法
【发布时间】:2015-11-06 07:27:30
【问题描述】:

我必须比较以下格式的两个文件:

Manufacturer,Model,Key
----------------------
Honda,Civic,12
Honda,Civic,13
BMW,z3,14
BMW,X3,15
BMW,z3,16

只有当每个型号和制造商的密钥相同时,文件才相同(相同的顺序),但型号和制造商可以有不同的顺序。 例如,上面提到的文件等同于:

Honda,Civic,12
BMW,z3,14
Honda,Civic,13
BMW,z3,16
BMW,X3,15

但不一样(思域的钥匙顺序不同):

Honda,Civic,13
Honda,Civic,12
BMW,z3,14
BMW,X3,15
BMW,z3,16

或者(BMW z3 key 的不同值):

Honda,Civic,13
Honda,Civic,12
BMW,z3,16
BMW,X3,15
BMW,z3,16

编写一个能够以这种方式比较两个文件的 java 程序的最佳方法是什么?我知道最简单的方法是使用一些 unix 命令(使用排序获取所有制造商,使用 grep 获取每个制造商的行,使用排序获取所有模型并再次使用 grep),但我必须使用 Java。 解决方案:

  1. 读取这些文件并将每一行添加到 Map>> 结构中,然后比较该结构中列表中的每个列表。它会起作用吗?每个文件中有 100.000 行的成本/速度有多快?
  2. 尝试使用java代码模拟sort和grep命令(据我所知并不容易)。
  3. 迭代每个制造商的每个模型的文件(可能会有 5.000 次迭代) 有任何想法吗?

谢谢!

【问题讨论】:

    标签: java file


    【解决方案1】:

    使用Map<String, List<String>>。键是制造商和型号,值是该组合的键列表(或整行,没关系)。我使用 String 是因为不需要将这些东西解析为更具体的结构,但如果您更喜欢这种设计,也可以这样做。

    将每个文件解析成这样的结构。如果之后,两个文件的映射相等,则文件是相等的。

    【讨论】:

    • 好的,这将是我的答案:)
    【解决方案2】:

    如果您要处理 100000 多行,则可以在每个品牌/型号的 id 列表中使用 java.util.zip.CRC32Map<String,Checksum> 会占用很小的内存,并且最后只需要对每个品牌/型号进行一次比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 2010-09-13
      相关资源
      最近更新 更多