0

我收到此数据,它是通过网络传输的,因此需要在本地缓存它。

数据格式为:

Action (String)
    Direction (String)
        Frame (int)
            X,Y (Point or int,int)

用法基本上是:

Point myPoint = data.get(action).get(direction).get(frame);
myPoint.x; // do something with x and y

我尝试了这种巨大的 hashmap 类型的结构:

HashMaP<String, HashMap<String, HashMap<int, Point>>> 

它有效,但丑陋且容易出错。

我还尝试将其拆分为类,这很有效;但需要大量的管家代码。

任何人都知道这个数据结构叫什么,也许我可以谷歌它。

有什么建议么?

4

1 回答 1

4

“巨大的哈希图类型结构”中隐含的是实体之间的关系:

  • action 是一个字符串,它索引“多”方向
  • 方向是索引“许多”帧的字符串
  • frame 是一个索引“许多”点的数字
  • 点是一个结构

一种简单的方法可能是定义一个包含“动作”、“方向”和“框架”的“关键”对象,并在地图结构中使用它,例如

class PointKey {
    String action, direction;
    int frame;
    PointKey(String action, String direction, int frame { .. init etc etc }

...

根据使用特性,您将希望覆盖hashCode以提供一些基于三部分键的“合理”唯一值,或者Comparable如果您期望有大量这些值并且您希望阅读它们更多,则实施而不是写它们。

然后你定义你的Map

Map<PointKey,Point> data = new HashMap<PointKey,Point>();

或者

Map<PointKey,Point> data = new TreeMap<PointKey,Point>();

取决于您选择的方法。

另一个问题是,如果您要创建大量这些密钥,则是创建新密钥以随机访问它们的开销,在这种情况下,您可能希望使用享元,例如

...
// PointKey instance that is retained and used again and again, purely for 'access' purposes
dataKey.setIdentifiers(myAction, myDirection, myFrame);
Point myPoint = data.get(dataKey)
于 2012-11-09T08:30:23.190 回答