我收到这些数据,它是通过网络进行的,所以需要在本地缓存它。
数据格式为:
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>>>
它有效,但很丑陋且容易出错。
我也尝试将它分成Classes,它有效;但需要很多家务代码。
任何人都知道这个数据结构叫什么,也许我可以google它。
有什么建议吗?
答案 0 :(得分:4)
隐含在“巨大的hashmap结构类型”中是实体之间的关系:
一种简单的方法可能是定义一个包含'action''direction'和'frame'的'key'对象,并在Map结构中使用它。例如
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)
取决于您选择的方法。
另一个问题是,如果你要创建大量的这些密钥是创建新密钥以随机访问它们的开销,在这种情况下你可能喜欢使用flyweight,例如。
{{1}}