Java 如何从ArrayList按键获取值?

Java 如何从ArrayList按键获取值?,java,android,Java,Android,我试图使用arraylist.get(2)通过键获取特定的索引值但失败,也会引发异常 IndexOutOfBoundsException:索引2无效,大小为1 其中,我的arraylist的大小为3(0-2) 下面是我的方法代码: @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { //add keys to arraylist String key=dataSnapshot.get

我试图使用
arraylist.get(2)通过键获取特定的索引值但失败,也会引发异常

IndexOutOfBoundsException:索引2无效,大小为1

其中,我的arraylist的大小为3(0-2)

下面是我的方法代码:

@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {

    //add keys to arraylist
    String key=dataSnapshot.getKey();
    arraylist.add(key);

    //it displays found indexes as 0, 1, 2
    int index= arraylist.indexOf(key);
    Log.i("indexs", String.valueOf(index));

    //it displays exception, but when I replace "2" with "0" then, 
    //it prints one value four times which lie on index "1"
    String specificIndexValue = arraylist.get(2);
    Log.i("IndexValues", specificIndexValue);

}

第一次调用
onchildaded
时,将出现异常,因为
arraylist
将只有一个项目,并且您正在访问需要列表中3个或更多项目的索引2

String specificIndexValue = arraylist.get(2);
我们需要更多信息来解决您的问题
它会将索引“1”上的一个值打印四次

看起来您可能希望存储在有序映射中,而不是数组中,其中键是快照键,值是快照

试试这个来调试

@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {

    //add keys to arraylist
    String key=dataSnapshot.getKey();
    arraylist.add(key);

    if (arraylist.size() == 3){
       Log.i("Key: " arraylist.get(2), "Index: 2");
    }
}

尺寸3(0-3)
?大小3为
(0-2)
DataSnapshot
大小为3?如果消息显示列表大小为1,则为sie 1。你确定你在看正确的名单吗?@Mortezajalamabadani-是的!我们不知道
arraylist
的大小是如何增加的。方法调用
onchildaded
,并将子id添加到数组列表中。我敢打赌这是唯一一个。。。加上OP没有提供任何其他上下文,所以这可能是一个安全的假设。@StevenSpungin-它的运行和在索引下打印值,如
I/IndexValues-0:Managel life:Bad
I/IndexValues-1:avarge
I/IndexValues-2:children life:Good
看起来不错。但是如何从他们那里得到欲望指数值呢?所以你的“指数”实际上就是他们被添加的顺序,是的。如果是,要获取快照的索引:
arraylist.indexOf(dataSnapshot.getKey())
。这假设您的键具有适当的
equals()
实现。。。索引是循环的
i
值,是吗?@StevenSpungin-它只打印最后一个索引编号(不是值),但我仍然希望获得所需索引下的字符串值(不是索引编号)。