【问题标题】:parse huge csv for using as key and value解析巨大的 csv 以用作键和值
【发布时间】:2014-10-05 13:52:16
【问题描述】:

我必须解析一个巨大的 csv,其中每行包含 3 个值。 一开始我得到assets文件夹的csv并逐行读取。

    while ((line = reader.readLine()) != null) {
            String[] string = line.split(",");
            ...
    }

现在我想有效地读取这些值,以便以后使用它们。 我需要第一个值作为一对。每对都与同一行中的最后一个值有关。 例如:

    1,2,3
    4,5,6
    ...

结果:

    pair = [1,2];
    pairValue = 3;
    ...

但我需要 .csv 的所有值稍后作为对和单个(用于计算)使用它们,那么哪种方法最适合使用这些数据?

可能是<ArrayList>HashMap 之类的

     Map <String,String> map =  new HashMap<String,String>();
    //add items 
     map.put(pair,value);
    //get items 
    String valueOfKeys =(String) map.get(pair);

我希望你们中的一个人能理解我并能提供帮助。

【问题讨论】:

  • 你的 csv 有多大?
  • 计算机中有一个叫做数据库的东西。 Android 有 SQLite
  • 数据大小为221.048字节

标签: java android csv


【解决方案1】:

第一个问题是所有数据都适合内存吗?假设它确实如此,那么您需要决定如何查找数据:

  1. 您是否需要根据行号访问值,例如给我第 1985 行的 pair 和 pairValue?
  2. 您是否需要根据pairValue 访问一对,例如给我pairValue = 3 的对?
  3. 您是否需要从头到尾遍历所有数据?

在第一种情况下,数组列表最快,但请注意,这将涉及分配大量连续的内存。

在第二种情况下,hashmap 会起作用,正如您已经建议的那样。

在第三种情况下,LinkedList 可以工作,这意味着您不必分配连续的内存块,但访问第 n 个元素会更慢。

如果文件太大而无法放入内存,那么您将不得不将数据写入数据库表并从那里查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-31
    • 2013-11-07
    • 2018-12-02
    • 2015-06-28
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    相关资源
    最近更新 更多