在Java中存储15,000个项目

时间:2013-06-15 12:49:58

标签: java arrays spreadsheet

我有一份包含15,000件物品的文件。每个项目包含6个变量(字符串和整数)。我必须将所有这些复制到某种二维数组中,最好的方法是什么?

到目前为止,我的想法是:

Make a GIANT 2D array or array list the same way you make any other array.

优点:简单缺点:凌乱(会为此创建一个类),大量的代码,如果我犯了错误就找不到它它是,所有变量都必须是字符串,甚至是整数,这将使我的工作更难在路上

Make a new class with a super that takes in all the variables I need.
Create each item as a new instance of this class.
Add all of the instances to a 2D array or array list.

优点:简单,不那么混乱,更容易找到错误,并非所有变量都需要成为字符串,这使得以后当我不必将字符串转换为int时更容易少打字给我缺点:慢一点?实例会让我的数组编译得更慢吗?当我在搜索其中的项目时,它们是否会使整个阵列变得缓慢?

这些想法似乎并不是很好:(在我开始三周,每天五小时添加这些项目的过程之前,我想找到最好的方法,所以我不必再这样做了。 ..对我目前的想法或任何新想法的建议?

数据示例:

0: 100, west, sports, 10.89, MA, united

* 不是实际数据

4 个答案:

答案 0 :(得分:1)

你的第二个选择似乎很好。您可以创建一个包含所有项目的类,并创建该类的数组。

您可以使用以下内容: 1.使用缓冲读取器读取文档,以免发生内存问题。 2.创建一个包含项目的类。 3.创建所需类型的列表并将元素存储到其中。

如果您面临更多问题,请告诉我。

答案 1 :(得分:0)

如果您已经拥有包含15000 * 6项目的文档,根据我的经验,您可以更好地编写程序以使用正则表达式并解析它并使输出成为您想要的格式的Java数组的内容。有了这样的解析程序,如果你想以不同的方式生成它,你也可以很容易地改变15000行的格式。

关于最终格式,我会有一个bean的ArrayList。到目前为止,通过文本,您不一定需要一个接受变量的超级,除非您需要具有差异化的子类型。

您可能会在一个班级中耗尽静态空间。所以我所做的就是将一个像这样的大类分解成一个带有一堆内部嵌套类的文件,每个类都有64K(或更少)数据作为静态最终数组,然后我将它们合并在主类中在那个文件中。

我有一个很多名字要修复它:

class FixName{

    static String[][] testStrings;
    static int add(String[][] aTestStrings, int lastIndex){
        for(int i=0; i<aTestStrings.length; ++i) {
            testStrings[++lastIndex]=aTestStrings[i];
        }
        return lastIndex;
    }
    static {
        testStrings = new String[
                FixName1.testStrings.length
                +FixName2.testStrings.length
                +FixName3.testStrings.length
                +FixName4.testStrings.length
/**/        ][];
        int lastIndex=-1;
        lastIndex=add(FixName1.testStrings,lastIndex);
        lastIndex=add(FixName2.testStrings,lastIndex);
        lastIndex=add(FixName3.testStrings,lastIndex);
        lastIndex=add(FixName4.testStrings,lastIndex);
/**/    }
}
class FixName1 {
static String[][] testStrings = {
{"key1","name1","other1"},
{"key2","name2","other2"},
//...
{"keyN","nameN","otherN"}
};
}

答案 2 :(得分:0)

如果您还没有(因为您的问题没有明确说明),请创建一个包装器(Item)。

如果元素的大小是固定的,即1500使用数组,则使用LinkedList(编写自己的链表或使用Collection)。

如果您需要在此项集合上支持其他操作,可以进一步插入,搜索(特别是)使用平衡二叉搜索树。

通过对问题的理解,我会说链表是更好的选择。

答案 3 :(得分:0)

如果项目具有唯一属性(名称或ID或行号或任何其他唯一标识符),我建议使用带有包装项的HashMap。如果你打算对你的数据进行任何类型的查找(查找id为x并执行操作y的项目),这是最快的选项,而且非常干净,它只需要一个包装器,你可以使用已经实现的数据结构

如果您没有进行任何查找并且需要按照特定顺序整体处理这些项目,我建议使用ArrayList,它是非常优化的,因为它是java中最常用的集合。您仍然需要使用包装器来保持清洁,并且列表比阵列更清晰,几乎不需要额外费用。

根据您的需求制作您自己的集合并不是非常具体,只需使用一个已经实现的并且从不担心您的代码中断,如果它确实是oracles故障;)