获取我刚刚在Java/Android中添加到ArrayList的对象的索引
我想将一系列对象加载到ArrayList,并返回它添加位置的索引,以便以后可以直接从ArrayList使用它。这类似于我为一个图形加载一组5帧,然后直接从列表中调用第3帧的数据。获取我刚刚在Java/Android中添加到ArrayList的对象的索引,java,android,list,arraylist,indexing,Java,Android,List,Arraylist,Indexing,我想将一系列对象加载到ArrayList,并返回它添加位置的索引,以便以后可以直接从ArrayList使用它。这类似于我为一个图形加载一组5帧,然后直接从列表中调用第3帧的数据。 在浏览了几篇可能相关的帖子后,我发现了一些相关的东西,这让我很好奇。是否有一个内置函数来获取最近添加的对象的索引 我看到的让我想到这一点的链接是: 基本上,我看待它的方式是,我会按照以下伪代码的思路做一些事情: private ArrayList<FrameData> mylistofframesh
在浏览了几篇可能相关的帖子后,我发现了一些相关的东西,这让我很好奇。是否有一个内置函数来获取最近添加的对象的索引 我看到的让我想到这一点的链接是: 基本上,我看待它的方式是,我会按照以下伪代码的思路做一些事情:
private ArrayList<FrameData> mylistofframeshere = new ArrayList();
FrameData Framenumberone = new FrameData(constructorblah goes in here);
int wherediditgo = mylistofframeshere.add(Framenumberone);
在这一点上,我的编码背景更加程序化,因此我更习惯于知道索引是什么,只是为了开始放置数据。我也查看了oracle文档,发现与上面的链接类似。有什么建议吗
编辑:我将在这里添加一些额外的说明,因为我确实没有在示例和解释中投入足够的精力
另一个尝试使用列表直接索引的例子是,如果我有一组瓷砖,我想用作游戏或其他东西的地形。我会将该区域的一组可能的磁贴加载到一个中心ArrayList中。在尝试放置这些平铺时,我会引用我在ArrayList中预先加载的对象,以便绘制适当的位图/任何东西
我对Java还是有点陌生,所以我敢打赌,在使用这些数据类型的过程中,我忽略了一些简单的东西。我将继续编辑此内容,直到正确解释为止。当您向
阵列列表添加内容时,它将转到最后可用空间。换言之:
List<FrameData> list = new ArrayList<FrameData>();
list.add(frame1);
FrameData frame = list.get(list.size() - 1); //frame == frame1
List List=new ArrayList();
列表。添加(框架1);
FrameData frame=list.get(list.size()-1)//frame==frame1
但我想知道你为什么要这么做。如果您详细解释您试图实现的目标,可能会有一种不同/更好的方法来获得相同的结果。有一种方法类似于ArrayList.indexOf(object)代码>,尝试使用该方法获取对象的索引这一切取决于您希望使用索引的目的。如果您只需要将列表中的每个元素映射到一个键,以便以后可以使用该键检索元素,则应该考虑使用哈希图。如果您更关心排序,可以使用列表。正如有人已经回答的那样,随着向列表中添加元素,索引将增加。如果您知道将要使用的总帧数,则可以通过将大小作为参数传递给其构造函数来初始化ArrayList,然后通过使用list.add(0…size-1,元素)手动指定索引来添加每个帧
总之,
如果您只是想通过自己的密钥存储和检索/
递增键->使用哈希映射
如果排序很重要,请使用列表
您可以使用映射,而不是以这种方式使用ArrayList
。您可以将Integer
替换为可能更适合您的项目的任何内容。这只返回找到的第一个对象实例。我需要找到该类型对象的特定实例。比如说,我在屏幕上有一个相同类型的怪物列表,我如何挑选一个特定的怪物?假设我想让那个怪物在其他怪物死亡之前不受伤害,我需要知道列表中的怪物,这样我就可以在加载时和满足条件后正确设置它的属性。类似的东西应该是怪物对象的属性,而与列表本身无关。因此,要实现这一点,您需要向Monster类添加一个属性,例如private boolean invincible
。然后在其重写的equals方法中,您应该检查此条件。当您执行此操作时,ArrayList.indexOf(object)
将返回您正在查找的Monster的正确实例。如果有任何内容,我将使用一个特定的设置或对象来复制我将使用的ArrayList。我们的想法是将一组资源加载到列表中,并直接引用列表,以确定在位图/任何对象上放置所有内容的位置。根据您所说的,使用对象类型的良好的2维(或3维)数组可能会更好。然后可以创建其他类似的数组来存储其他属性。例如,假设某个对象的4x4数组,(2,3)和(0,2)处的实例具有一些特殊属性,例如无敌性。您可以创建另一个4x4布尔数组,并将这些元素标记为true,而其余元素可以为false。通过遍历此数组,您可以确定哪些对象(在同一组点上)在另一个数组中具有此属性。因此,实际上没有直接返回或获取加载到数组的对象的索引或直接引用的方法。也许我误解了这些东西的正确用法。其次,为了回应你的回答,我还编辑了一点主要的帖子来澄清一些事情。希望它现在会更有意义。感谢您提供到目前为止的信息!你考虑过使用hashmap吗?你可以做一些类似于map.put(“黑瓷砖”,黑瓷砖)的事情代码>和以后的tile=map.get(“黑瓷砖”)如果多个工作线程试图简单地访问数据以生成他们自己的位图,这会起作用吗?在阅读关于这个主题的google文档时,这似乎是一个好办法。在多线程环境中,你可以使用ConcurrentHashMap,这是一个线程安全的hashmap。哦,哇,所以我会使用ConcurrentHashMap将我的所有对象加载到带有设置标签的表中,然后使用类似ArrayList的东西来创建对象列表
List<FrameData> list = new ArrayList<FrameData>();
list.add(frame1);
FrameData frame = list.get(list.size() - 1); //frame == frame1