Java:对象数组的高效内存分配方式

时间:2012-07-31 20:14:35

标签: java

在下面的代码中,我试图避免为类的实例分配内存的最后三行。关于如何将内存分配部分放入类定义中的任何建议?所以我想要做的就是能够在pInfo[0].sValue="string";

之后立即执行AClass [] pInfo = new AClass[10];
  class AClass {
     private String sName="";
     private String sValue="";
  }

    AClass [] pInfo = new AClass[10];

   // how to avoid the code below or bring them into class definition?  

    pInfo[0] = new AClass();
    pInfo[1] = new AClass();
      ... 
    pInfo[9] = new AClass();

编辑:我的意思是效率就是代码量+代码可读性

4 个答案:

答案 0 :(得分:7)

AClass[] pInfo = {new AClass(),new AClass(), etc.};

OR

AClass[] pInfo = new AClass[10];

for(int i = 0; i < pInfo.length; i++)  
{  
    pInfo[i] = new AClass();  
}  

答案 1 :(得分:1)

您可以尝试这样的事情:

class AClass {
     public String sName="";
     public String sValue="";
}

class AClassArray {
     public AClass[] pInfo;

     public AClassArray() {
        pInfo = new AClass[10];
        for(int i = 0; i < pInfo.length; i++)  
           pInfo[i] = new AClass();  
     }
}

使用:

AClassArray aClassArray = new AclassArray();
aClassArray.pInfo[i].sXXXX;

答案 2 :(得分:1)

没有办法避免这种情况,你需要为数组的每个元素显式赋值。

JLS §10.3表示数组在创建元素时为其元素提供初始值。

JLS §4.12.5声明引用类型的初始值为null

答案 3 :(得分:0)

class AClass {
   private String sName="";
   private String sValue="";

   public static final AClass[] getArrayOfObjs(int size){
    if(size <= 0)
       return null; //You can also create your custom exception to be thrown here
    AClass[] array = new AClass[size];

    for(int i = 0; i < size; i++)  
    {  
       array[i] = new AClass();  
    }  
    return array;
  }
}

然后实例化为

AClass [] pInfo = AClass.getArrayOfObjs(10);