-1

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

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

我需要对其进行哪些操作?

[1] 更改段的颜色。

[2] 在某个角度添加切割。

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

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

现在我有一个 Segment 的类来存储它的末端和颜色的角度。和 ArrayList 一起工作。

我遇到的问题:

[1]我想要比 ArrayList 更快的东西。(TreeSet?还有别的吗?)

[2]我将没有切割的圆形视为特例。(0 和 0 处的两个假削减)

[3]我将包含 0 角的段视为特殊情况。说段 (7pi/8, pi/8) 和 (pi/8, 7pi/8) 需要不同的方法和大量的 if 条件。

4

1 回答 1

4

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

首先让您的 API 正确/方便,然后再担心性能(并且仅在实际需要时)通常是一个安全的选择。换句话说,不要预先优化。

既然您告诉我您需要更快的添加和删除,那么适合这项工作的工具可能是HashSet. 从其文档中

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

注意:您需要确保在您的类上正确实现equalshashcode正确地工作,以使其正常工作。

于 2013-06-03T18:21:29.867 回答