Java,将hashMap转换为数组或空数组

时间:2016-09-26 13:39:29

标签: java arrays

我有点初学者。有趣与否,我不知道如何创建一个空的类型数组。我的班级:

class Depot
{
}

存储它们:

private final HashMap<Integer, Depot> depots;
depots = new HashMap<>();

我希望将它们归还:

public Depot[] getDepots()
{
    if (depots.values().isEmpty())
    {
        return (Depot[]) new Object[0]; ***
    }
    else
    {
        return depots.values().toArray(new Depot[depots.values().size()-1]);
    }
}

作为一个数组。现在,当没有仓库时,它们就是棘手的部分。首先,这一行depots.values().size()-1失败了。 return (Depot[]) new Object[0];似乎没问题,但仍会触发异常:java.lang.ClassCastException:[Ljava.lang.Object; cannot be cast to [Depot;

1 个答案:

答案 0 :(得分:2)

没有必要施放。只需首先创建一个Depot[]

public Depot[] getDepots()
{
    if (depots.isEmpty())
    {
        return new Depot[0];
    }
    else
    {
        return depots.values().toArray(new Depot[depots.size()]);
    }
}

另请注意,else子句中数组的长度应为depots.values().size()(或depots.size()),而不是depots.values().size() - 1。如果将一个太小的数组传递给toArray(),该方法将不会使用该数组,并且将创建一个新数组。