选择什么数据结构,实现切割圆

时间:2013-06-03 18:16:06

标签: java data-structures arraylist geometry

我无法弄清楚哪种数据结构最适合此类问题:

我有个圈子。它可以在不同的位置(角度)进行切割。切口之间的段有颜色(比如红色或黑色)。如果没有剪切,则所有圆圈都有一种颜色。

我需要做哪些操作?

[1]更改细分受众群的颜色。

[2]以某种角度添加切口。

[3]对于给定的角度,告诉它属于哪个部分。

[4]加入相同颜色的连续片段。

现在我有一个Segment类,用于存储其末端和颜色的角度。 和ArrayList一起使用它。

我遇到的问题:

[1]我想要比ArrayList更快的东西。 (TreeSet?别的什么?)

[2]我正在将没有削减的圆圈视为特殊情况。 (两个假的削减在0和0)

[3]我正在处理包含0角度的Segments作为特例。 Say Segments(7pi / 8,pi / 8)和(pi / 8,7pi / 8)需要不同的方法和大量的if条件。

1 个答案:

答案 0 :(得分:4)

在Java中执行此操作的惯用方法不是使用数据结构,而是创建自己的类。 EG:SegmentedCircle类。给它你希望它拥有的API然后实现它作为行为。它可能会委托给名为SegmentCut的其他类,并且可能包含这些类的列表。

通常可以安全地让您的API首先正确/方便,然后担心性能第二(并且只有在实际需要时)。换句话说,不要预先优化。

由于您告诉我您需要更快的添加和删除,因此该作业的正确工具可能是HashSetFrom its documentation

  

此类为基本操作(添加,删除,包含和大小)提供恒定的时间性能

注意:您需要确保在课程中正确实施equalshashcode才能使其正常工作。