有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中存储15000项的数组

我有一份有15000个项目的文件。每个项目包含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) 个答案

  1. # 1 楼答案

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

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

    如果你面临进一步的问题,请告诉我

  2. # 2 楼答案

    如果您已经有了包含15000*6项的文档,根据我的经验,您最好编写一个程序来使用regex并对其进行解析,并以您想要的格式将输出作为java数组的内容。有了这样一个解析程序,如果您想以不同的方式生成15000行,那么您也可以很容易地更改其格式

    至于最后的格式,我会有一个你bean的ArrayList。到目前为止,您不一定需要接受变量的super,除非您需要有不同的子类型

    您可能会在单个类中用完静态空间。所以我要做的是将一个像这样的大类分解成一个文件,其中包含一堆内部嵌套的类,每个类都有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"}
    };
    }
    
  3. # 3 楼答案

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

    如果元素的大小是固定的,请使用array other wise使用LinkedList(编写自己的链接列表或使用集合)

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

    理解了这个问题,我想说链表是更好的选择

  4. # 4 楼答案

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

    如果您不进行任何查找,并且不需要按特定顺序处理所有项,我建议使用ArrayList,它是非常优化的,因为它是java中最常用的集合。您仍然需要包装器来保持整洁,而且列表比数组干净得多,几乎不需要额外的成本

    创建自己的集合没有什么意义,因为您的需求不是非常具体,只需使用一个已经实现的集合,不要担心代码会被破坏,如果是oracles的错误;)