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

4
在下面的代码中,我正在尝试避免最后三行为类的实例分配内存。有什么建议可以将内存分配部分放在类定义内部?所以,我想要做的是在AClass [] pInfo = new AClass [10];之后立即执行pInfo [0] .sValue ="string";
  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();

编辑:我所说的效率是指代码数量+代码可读性。


1
你是指“打字效率高”还是“性能高效”? - Yogu
使用构造函数参数来初始化字段可能更好,这样你可以像下面这样编写代码: AClass[] pInfo = new AClass[] { new AClass("name-1", "value-1"), ... }; - obataku
@Yogu 在代码量和代码可读性方面的重要性。 - C graphics
4个回答

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

或者

AClass[] pInfo = new AClass[10];

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

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;

@Woot4Moo:提交得有点太快了。 - Chris Dargis
这个可以工作,但不是很可扩展。你最好使用 Vector 或 List 而不是重复造轮子。 - Code-Apprentice
@Code-Guru:当然不是!底层数据结构是一个数组! - Chris Dargis
@DougRamsey 如果我想创建 BClass 并拥有一个这个新类的数组,该怎么办?现在我必须编写一个 BClassArray。另一方面,像 VectorList 这样的通用集合将适用于我选择的任何类,而无需为其编写自定义的 Array 类。(也许“可扩展”不是完全正确的词来描述这个问题...) - Code-Apprentice
@Code-Guru:说得好,我可能错了,但我相信Java 6支持构建泛型数组。 - Chris Dargis
1
@DougRamsey 可能是这样...自从Java 5以来,我没有跟上所有的语言变化 ;-( - Code-Apprentice

1

无法避免,您需要显式地为数组的每个元素分配一个值。

JLS §10.3指出,当创建数组时,数组提供其元素的初始值。

JLS §4.12.5指出,引用类型的初始值为 null


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);

2
如果size < 0,该对象可能存在漏洞,因为它会抛出异常且不是最终的。 - Woot4Moo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接