对象类中的静态列表

时间:2014-05-28 06:16:21

标签: java

这是一个很好的java实践(就内存和计算效率而言)在类本身中关联静态对象列表。

package collection;

/**
 * Created by ANJANEY on 5/28/2014.
 */

import java.util.*;

    class Student1
    {

    int rollId;
    String name;

    static List<Student1> studentList=new ArrayList<Student1>();

    Student1(int rollId,String name)
    {
        this.rollId=rollId;
        this.name=name;
        studentList.add(this);
    }


    }

    public class A {

    public static void main(String aaaa[])
    {
        new Student1(1,"Anjaney");
        new Student1(2,"Prerak");

        Iterator<Student1> itr=Student1.studentList.iterator();

        while(itr.hasNext())
        {
            Student1 st=itr.next();
            System.out.println("Roll = "+st.rollId+" Name = "+st.name);
        }
    }

    }

2 个答案:

答案 0 :(得分:3)

您在此处实施的内容称为“实例控制”类(请参阅Effective Java - Joshua Bloch第2章 - 第I项)。

通常开发人员使用静态工厂实现实例控制的类,您可以保持对创建的对象的引用(就像您使用该List一样)以及执行其他操作,例如限制实例数。一个着名的“实例控制”类的私人案例叫做Singleton(虽然在这种情况下保留一个列表没有意义......)。

从性能角度来看,我没有看到将列表保留在类内或类外的任何有意义的收益/损失。

答案 1 :(得分:0)

由于列表是静态的,因此无论如何只能为单个类初始化一次,因此在类外声明列表(例如在main方法中)不会产生太大的区别,因为即使在那里它只会​​被初始化一次。但是声明类中的列表并初始化它(使用构造函数或getter / setter),肯定会更好地控制列表对象的访问。