这可能是重复的,但我不知道正确的术语甚至可以搜索我想要的内容,所以我很抱歉,如果是这样且标题不完全具体。
这是我的情景:
我想要彼此映射2种不同类型的对象,称它们为ObjectA和ObjectB。这些对象在for循环中生成。我希望迭代中的每个实例都映射到另一个实例。所以基本上,ObjectA(1) - ObjectB(1),ObjectA(2) - ObjectB(2)等。并且将有大约500-3000个条目要映射。
这样做的原因是有些方法会传递ObjectA而我需要获取相应的ObjectB,反之亦然。我也不能使用初始循环索引作为参考,它只需要是其中一个对象。
我尝试过使用Guava HashBiMap,但是我不喜欢它有几个原因。 1)这是我将使用任何Guava类的唯一实例,并且我不一定要为我的包添加~500kb。 (这是一个移动应用程序,所以试图保持它小)和2)我需要每帧迭代对象,并迭代通过keySet()给予重要的内存分配。我确信有办法解决这个问题,这可能只是我做的一些错误,但仍然是......原因1。
我知道索引被映射后的当前解决方案是只有2个ArrayList,(或者实际上是libgdx数组,但为了理解逻辑我们可以假设是ArrayList),而我只是这样做;
ObjectA objectA = objectAList.get(objectBList.indexOf(objectB));
反之亦然。
无论如何,我也不喜欢这个解决方案,它感觉很昂贵,我确信有一个更简单,更快捷的方法,我只是不知道要搜索什么。
感谢您的帮助!
答案 0 :(得分:0)
也许这会对你有所帮助。 Apache Commons Collections中有一个名为 BidiMap
的接口 [^.]+
实现此接口的类具有您正在寻找的方法。我的意思是按价值获得密钥,反之亦然,这个包重约150 kb。
问候