Java:使用ArrayList编写pojo的最有效方法

mic*_*ael 5 java memory-management reference arraylist pass-by-reference

编写包含ArrayList的简单pojo类,在时间和内存消耗方面最正确和/或最有效的方法是什么?(关于引用的java机制,通过ref',赋值等):

public class MyClass {

    //1. Do we need to initialize here?
    public List<String> mList = new ArrayList<>();

    //2. Do we need to declare D. Constructor?
    public MyClass() {}

    //3. Need to initialize the list here or just pass?
    public MyClass(List<String> list) {
        this.mList = list;
    }

    //4. Better way for copy/assignment?
    public void setMlist(List<String> list) {
        this.mList = list;
    }

    public List<String> getMList() {
        return this.mList;
    }

}
Run Code Online (Sandbox Code Playgroud)

Jea*_*ard 5

  1. 这里需要初始化吗?

不,仅在需要时才对其进行初始化。如果有可能在未初始化的情况下使用它,请确保检查 null。

  1. 我们需要声明D.Constructor吗?

如果你什么都不做,我真的不明白拥有它的意义。请注意,有些人仍然喜欢在其中声明它并在其中写入注释并表明它不应该做任何事情:

public MyClass(){
    //NOP
}
Run Code Online (Sandbox Code Playgroud)

NOP。这不会改变与内存使用相关的任何内容。然而从逻辑上讲,默认构造函数应该初始化列表而不是在开始时初始化它。所以我们有两个选项,我们传递一个已经存在的(使用参数化构造函数)或者我们使用默认构造函数并创建一个空列表。

  1. 需要在这里初始化列表还是只是通过?

只是通过,否则接收它作为参数有什么意义?如果您初始化它并重新分配,那将毫无意义。您可能想要检查接收到的是否为空,否则对其进行初始化。

  1. 复制/分配的更好方法?

如果您真的想制作副本,您可能需要检查Collections#copy. 然而,这不是 setter 的重点,你在这里所做的是正确的。