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()可能会更有效一些
当地图为空时(尽管它可能不会产生明显的差异)。