如何从不同类型的矢量数组中选择相同类型的随机对象?

时间:2013-09-30 02:35:46

标签: java oop vector

例如,假设一个矢量由一些对象组成,一个是矩形,一些是三角形,然后是圆形。

v = [rectangle, triangle, triangle, circle, circle]

矢量的大小可以改变。我可以添加另一个圈子:

v.addElement(circle);

和..

v = [rectangle, triangle, triangle, circle, circle, circle]

但是每个对象类型都像上面一样聚集在一起。它不可能像:

v = [rectangle, circle, circle, triangle, circle, triangle] //<-- can't be.

我知道我解释得非常可怕,但希望,这足以理解我的情景。现在,我想随机选择一个类型为circle的对象。

我的思维过程是制作一个单独的方法,1,找到起始索引和2,找到结束索引,然后使用随机函数。有没有更优雅的方法来解决只能随机选择圈子的问题?

4 个答案:

答案 0 :(得分:1)

使用Collections API:

Collections.shuffle(v);
Object random = v.get(0);

答案 1 :(得分:0)

您应该使用散列映射并将对象类映射为该类的对象和相应的对象数组。您可以使用反射来获取类名并将其设置为键,然后将该对象作为值添加到数组中。

否则,您无法对数组中的类似对象进行分组,并从您询问的不同类的数组中的一组类似对象中选择一个随机对象...除非您错误地构造了您的问题

答案 2 :(得分:0)

这听起来像一个相当简单的随机挑选问题。您需要做的就是生成一个随机数并获取该元素 -

v.get(Random.nextInt(v.size()));

答案 3 :(得分:0)

您可以使用implements关键字来检查对象是否属于某种类型(或该类型的子类型),但这不是一个非常漂亮的解决方案。

最好的解决方案可能是控制对此向量的读写访问;基本上,如果您有插入不同形状的特定方法,您可以保持控制并始终确保将事物插入到正确的位置。此时,只需存储两个int或类似内容,以便在选择时知道第二和第三部分的开始位置。

虽然个人而言,如果可能的话,我会使用三个单独的向量。