自定义对象的Arraylist

时间:2014-01-21 23:42:35

标签: java object arraylist

这是一个相当简单的问题,但我是一个初学者,我已经被困在这个部分好几个小时了。我不是在寻找一个简单的方法,而是我只想了解我的代码发生了什么,以及为什么它不起作用。我的问题是:

创建一个包含随机数和当前时间的节点类。 创建存储类并将这些节点存储在列表/数组中。 使用主类创建50个节点并显示。

当我运行50次并获取我的列表时,我将列表打印出时间,以便我可以检查我的代码是否正在运行,并且它们都有相同的时间。这意味着不同的节点不会存储到我的列表中,而是在每次循环运行时被删除。那是为什么?

附上我的代码:

主:

public class NodeSort {

public static void main(String[] args) 
{
    int c = 0;
    while (c < 50)
    {
        Storage.add();
        c++; 
    }


}

}

节点:

public class Node
{
public static int num;
public static long time;

public Node()
{
    num = Random.getNum();
    time = System.nanoTime();
}

public static long getTime()
{
    return time;
}

public static int getNum()
{
    return num;
}
}

存储:

public class Storage 
{
public static ArrayList<Node> list = new ArrayList<>();

public static void add()
{

    list.add(new Node());

}

当我确实得到x = 1-50的时间时,它会同时打印出50次而不是50次不同的时间。

1 个答案:

答案 0 :(得分:4)

它们都具有相同的time值,因为它们几乎在同一时间创建。 System.nanoTime()并不保证您实际上会获得纳秒精度,这取决于操作系统识别时间的能力。大多数操作系统只能提供毫秒级的分辨率。因此,如果所有调用都在相同的毫秒内发生,那么您将获得相同的值。

就随机数而言,我不知道 - Random类是什么?这不是java.util.Random

编辑:哦等等,我明白了。您在num课程中将timestatic声明为Node。这意味着每个只存在一个副本。只需从这些声明和返回值的方法中删除static