2

我有一个包含 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

4 回答 4

1

您的第二个选项似乎不错。您可以创建一个包含所有项目的类并创建该类的数组。

您可以使用以下方法: 1. 使用缓冲阅读器阅读文档,这样就不会出现内存问题。2. 创建一个包含您的项目的类。3. 创建您需要的类型列表并将元素存储到其中。

如果您遇到进一步的问题,请告诉我。

于 2013-06-15T12:54:18.517 回答
0

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

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

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

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

于 2013-06-15T13:45:17.887 回答
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"}
};
}
于 2013-06-15T13:32:00.210 回答
0

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

如果您不进行任何查找并且需要以没有特定顺序的方式整体处理项目,我会推荐一个ArrayList,它非常优化,因为它是 java 中最常用的集合。您仍然需要包装器来保持干净,并且列表比数组干净得多,几乎不需要额外成本。

制作自己的集合没什么意义,因为您的需求不是非常具体,只需使用已经实现的集合,而不必担心您的代码破坏,如果它确实是 oracles 错误;)

于 2013-06-15T14:01:40.920 回答