如何从类类型映射到列表?

时间:2011-12-21 12:01:05

标签: java list arraylist

我正在尝试通过批量渲染相同类型的块的纹理来改进我的游戏渲染。

我游戏中的每个块都是以 BlockWood 格式的类定义的,所有扩展来自

我目前在不同的块类/类型之间有一个映射,并且在地图上有一个ArrayList,它包含该类型的所有块的位置。

HashMap<Block, ArrayList<Vector2f>> blockMap = new HashMap<Block, ArrayList<Vector2f>>();

使用这个,我可以循环遍历地图,批量渲染每种类型的块,加快渲染速度。

然而,这种方法不起作用。我希望能够使用虚拟类来访问ArrayList -

blockMap.get(BlockWood.class);

有没有什么方法可以将类类型映射到ArrayList?或者我只需要映射类字符串表示?

3 个答案:

答案 0 :(得分:1)

您的地图不在班级和列表之间。它将Block的实例映射到列表。因此,您始终必须使用Block实例来访问其列表。

blockMap.get(new BlockWood());

问题是你会得到什么?您将获得以前使用此键存储在此地图中的列表。

BTW改进您的代码将您的地图定义更改为:

Map<Block, List<Vector2f>> blockMap = new HashMap<Block, List<Vector2f>>();

现在您可以使用任何类型的列表。

答案 1 :(得分:1)

您想使用Class作为密钥类型。您当前的实现使用Block实例作为密钥。使用Class的方式将使用Block的类型作为键。

答案 2 :(得分:-1)

这里的问题是Map有两个值(一个键和一个值),而一个List只有一个值(一个元素)。

因此,您可以获取所有键的列表或所有值的列表。

获取所有键的列表,您可以

ArrayList<Block> keys = new ArrayList<Block>(blockMap.keySet());

获取所有值的列表,您可以

ArrayList<ArrayList<Vector2f>> values = new ArrayList<ArrayList<Vector2f>>(blockMap.values());