我无法弄清楚哪种数据结构最适合此类问题:
我有个圈子。它可以在不同的位置(角度)进行切割。切口之间的段有颜色(比如红色或黑色)。如果没有剪切,则所有圆圈都有一种颜色。
我需要做哪些操作?
[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条件。
答案 0 :(得分:4)
在Java中执行此操作的惯用方法不是使用数据结构,而是创建自己的类。 EG:SegmentedCircle
类。给它你希望它拥有的API然后实现它作为行为。它可能会委托给名为Segment
或Cut
的其他类,并且可能包含这些类的列表。
通常可以安全地让您的API首先正确/方便,然后担心性能第二(并且只有在实际需要时)。换句话说,不要预先优化。
由于您告诉我您需要更快的添加和删除,因此该作业的正确工具可能是HashSet
。 From its documentation:
此类为基本操作(添加,删除,包含和大小)提供恒定的时间性能
注意:您需要确保在课程中正确实施equals
和hashcode
才能使其正常工作。