Java 关于Arraylist的几个问题

Java 关于Arraylist的几个问题,java,android,arrays,arraylist,Java,Android,Arrays,Arraylist,对不起,我只是个初学者。 我使用ArrayList保存手机传感器的结果 ArrayList b=新的ArrayList()//保存 我创建了20个项目 private void ini() { // TODO Auto-generated method stub for (int i = 0; i <= 20; i++) { b.add(i, (float) 0); } } 结果永远不会更改为什么不在0处插入值呢 按照 在此列表中的指定位置插入指定

对不起,我只是个初学者。 我使用ArrayList保存手机传感器的结果

ArrayList b=新的ArrayList()//保存

我创建了20个项目

private void ini() {
    // TODO Auto-generated method stub
    for (int i = 0; i <= 20; i++) {
        b.add(i, (float) 0);
    }
}

结果永远不会更改

为什么不在0处插入值呢

按照

在此列表中的指定位置插入指定元素将当前位于该位置的元素(如果有)和任何后续元素向右移动(将一个元素添加到其索引中)

例如

使用此解决方案,如果将20作为参数传入,则可以实时缩短和增加数据长度,而不会丢失数据

还可以反转您的数据 使用

注意这一点

    for (int i = 1; i <= 19; i++) {// result left
        b.add((i - 1), b.get(i));  
        Log.e("set", "" + i + " " + b.get(i));
    }

如果需要类似于循环缓冲区的实现,为什么不在列表末尾添加新值并删除第一个值(索引为0)?你可以:

private void addNewValue(List<Float> data, float value) {
    final int MAX_DATA_SIZE = 20;
    data.add(Float.valueOf(value));
    if(data.size() > MAX_DATA_SIZE) {
        data.remove(0);
    }
}
private void addNewValue(列表数据、浮点值){
最终整数最大数据大小=20;
添加数据(Float.valueOf(value));
if(data.size()>最大数据大小){
数据删除(0);
}
}
还可以使用链表,因为它在这种情况下工作得更快:

List<Float> data = new LinkedList<Float>();
List data=newlinkedlist();
用于删除第一个元素,然后删除arraylist末尾的新元素

public void onSensorChanged(SensorEvent arg0) {
    // TODO Auto-generated method stub
    textx.setText("X:" + String.valueOf(arg0.values[0])); // X
    texty.setText("Y:" + String.valueOf(arg0.values[1])); // Y
    textz.setText("Z:" + String.valueOf(arg0.values[2])); // Z
    try {
        b.remove(0);
        b.add(19, (float) arg0.values[1]);
        Log.e("set", "" + b.get(19));
    } catch (Exception obj) {
        Log.e("err", "err");
    }
}

“我创建了20个数组。”您只有一个arrayList,其中包含20个项目。@AmulyaKhare 21 ItemsOrry。应该是20件。谢谢。但是画画布对我来说不方便。我想画折线图。是的,我想在ArrayList中反向迭代是很困难的。提示集合。反向(数据);我已经为youThanks更新了答案。但是画画布对我来说并不方便
    for (int i = 1; i <= 19; i++) {// result left
        b.add((i - 1), b.get(i));  
        Log.e("set", "" + i + " " + b.get(i));
    }
 Log.e("set", "" + i-1 + " " + b.get(i-1));
private void addNewValue(List<Float> data, float value) {
    final int MAX_DATA_SIZE = 20;
    data.add(Float.valueOf(value));
    if(data.size() > MAX_DATA_SIZE) {
        data.remove(0);
    }
}
List<Float> data = new LinkedList<Float>();
public void onSensorChanged(SensorEvent arg0) {
    // TODO Auto-generated method stub
    textx.setText("X:" + String.valueOf(arg0.values[0])); // X
    texty.setText("Y:" + String.valueOf(arg0.values[1])); // Y
    textz.setText("Z:" + String.valueOf(arg0.values[2])); // Z
    try {
        b.remove(0);
        b.add(19, (float) arg0.values[1]);
        Log.e("set", "" + b.get(19));
    } catch (Exception obj) {
        Log.e("err", "err");
    }
}