2012-05-09 135 views
2

我想将一系列对象加载到ArrayList中,并返回它添加的位置的索引,以便稍后可以直接从ArrayList中使用它。这与我一样,为图形加载一组5帧,并直接从列表中调用帧3的数据。
环顾了一些可能相关的潜在职位后,我发现了一些相关的事情,让我感到惊讶。是否有内置函数来获取最近添加的对象的索引?获取刚添加到Java/Android ArrayList中的对象的索引

我在看的链接让我觉得这个是:ArrayList indexOf() returns wrong index?

基本上,我看它的方式是,我会做大致如下伪码线的东西:

private ArrayList<FrameData> mylistofframeshere = new ArrayList(); 
    FrameData Framenumberone = new FrameData(constructorblah goes in here); 
    int wherediditgo = mylistofframeshere.add(Framenumberone); 

或者,我以为我可以在编码更是基于程序在这一点上做一些沿

mylistofframeshere.getindex(Framenumberone); 

我的背景的线,让我一个m更习惯于知道索引是什么,只是为了将数据放在开头。我环顾了oracle文档,发现类似于上述链接的发现。有什么建议么??

编辑:我在这里添加一些额外的说明,因为我没有在这个例子和解释中付出足够的努力。

尝试使用类似列表的直接索引之类的东西的另一个例子是,如果我有一组我想用作地形的游戏或其他东西。我会将一组可能的区域加载到中央ArrayList中。试图放置这些图块时,我只需引用我的ArrayList中的预加载对象以绘制相应的位图/无论如何。

我对Java还是有点新,所以我敢打赌,这只是我在使用这些数据类型的机制中忽略的一些东西。我会继续编辑,直到我得到解释权。

回答

6

当您向ArrayList添加内容时,它会转到最后一个可用空间。换句话说:

List<FrameData> list = new ArrayList<FrameData>(); 
list.add(frame1); 

FrameData frame = list.get(list.size() - 1); //frame == frame1 

但我想知道为什么你需要这样做。如果你更多地解释你想要达到的目标,可能会有不同的/更好的方法来达到同样的结果。

+0

对于启动,这有很大的帮助。所以实际上没有直接返回或获得加载到数组的对象的索引或直接引用的方法。也许我误解了这些东西的正确用法。其次,为了回应你的回答,我还编辑了一些主要帖子来澄清一些事情。希望它现在会更有意义。感谢您迄今的信息! –

+0

你有没有考虑过使用散列表?你可以做一些类似'map.put(“黑色瓷砖”,blackTile);'以及后来'tile = map.get(“黑色瓷砖”);'把这个瓷砖恢复。 – assylias

+0

如果多个工作线程试图简单地访问数据以生成他们自己的位图,这样会工作吗? 在阅读有关该主题的谷歌文档后,似乎这将是要走的路。 –

2

有像ArrayList.indexOf(object);的方法,尝试使用该方法来获取对象

+0

这只会返回找到的第一个实例。我需要找到该类型对象的特定实例。举例来说,我有一张屏幕上所有同类型怪物的列表,我将如何挑选出特定的怪物?假设我想让那个怪物无懈可击,直到其他人死亡,我需要知道列表中的哪个怪物,这样我就可以在加载和满足条件后正确设置它的属性。 –

+1

像这样的东西应该是Monster对象上的一个属性,应该与列表本身无关。所以为了达到这个目的,你需要添加一个属性,比如'private boolean invincible'给Monster类。然后在其重写的equals方法中,您应该检查这个条件。当你这样做时,'ArrayList.indexOf(object)'将返回你正在寻找的怪物的正确实例。 – Jeshurun

0

这一切都取决于你要使用索引什么的指数。如果您只需要将列表中的每个元素映射到一个键,以便稍后可以使用键检索元素,则应该考虑使用HashMap。如果您更关心排序,则可以使用列表。正如某人已经回答的那样,索引随着您添加元素到列表中而增加。如果您知道预先掌握的总帧数,则可以通过将大小作为参数传递给其构造函数来初始化ArrayList,然后通过使用list.add(0 ... size)手动指定索引来添加每个帧-1,元素)。

总之,

  1. 如果你只是想存储和通过自己的密钥/ 递增键检索 - >使用HashMap。
  2. 如果订购很重要,请使用列表。
+0

如果有什么我会使用一个特定的设置或对象从我将使用ArrayList复制。这个想法是将一组资源加载到列表中,并直接引用列表,将所有东西放在位图/什么地方。 –

+0

从你说的话来看,这听起来像是你的对象类型的旧的2维(或者3维)阵列可能会更好。然后您可以创建其他类似的数组来存储其他属性。例如,设想某个对象的4x4阵列,并且(2,3)和(0,2)处的实例具有某些特殊属性,如无敌性。您可以创建另一个4x4布尔数组,并将这些元素标记为true,其余元素可能为false。通过遍历这个数组,你可以找出哪些对象(在同一组点上)在另一个数组中有这个属性。 – Jeshurun

0

以这种方式代替使用ArrayList,您可以使用Map<Integer,FrameData>。你可以用任何可能适合你的项目的东西来代替Integer

相关问题