Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,将hashMap转换为数组或空数组_Java_Arrays - Fatal编程技术网

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

Java,将hashMap转换为数组或空数组,java,arrays,Java,Arrays,我有点初学者。不管有趣与否,我不知道如何创建空类型数组。我的班级: class Depot { } 存储它们: private final HashMap<Integer, Depot> depots; depots = new HashMap<>(); 作为一个数组。现在,当没有仓库的时候,它们就变成了棘手的部分。首先,此行depots.values().size()-1失败。返回(Depot[])新对象[0];似乎没有问题,但仍会触发异常:java.lang.Cl

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

class Depot
{
}
存储它们:

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

作为一个数组。现在,当没有仓库的时候,它们就变成了棘手的部分。首先,此行
depots.values().size()-1
失败。
返回(Depot[])新对象[0]
;似乎没有问题,但仍会触发异常:java.lang.ClassCastException:
[Ljava.lang.Object;无法强制转换到[Depot;
无需强制转换。只需首先创建一个
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()
,该方法将不使用该数组,并将创建一个新数组。

无需强制转换。只需首先创建一个
仓库[]

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()
,该方法将不使用该数组,并将创建一个新数组。

为什么不只
新建仓库[0]
?为什么不只
新建仓库[0]
?为什么不
仓库.values().size()
,如果OP更愿意这样做?一旦你减去-1,你甚至需要一个条件吗?@dasblinkenlight向该方法传递一个太小的数组是没有意义的,因为它会导致
toArray()
忽略传递的数组并创建足够大的数组。因此我认为这不是故意的。虽然
depots.values().toArray(newDepot[depots.size()]);
也适用于空的情况,但不调用
values()
toArray()可能会更有效一些
当映射为空时(虽然它可能不会产生明显的差异)。如果OP愿意,为什么不
depots.values().size()
?一旦减去1,您甚至需要一个条件?@dasblinkenlight将太小的数组传递给该方法是没有意义的,因为它将导致
toArray()
忽略传递的数组并创建足够大的数组。因此我认为这不是故意的。虽然
depots.values().toArray(newDepot[depots.size()]);
也适用于空的情况,但不调用
values()
toArray()可能会更有效一些
当地图为空时(尽管它可能不会产生明显的差异)。