嗨,我是Java新手,正在尝试了解arraylist。我正在使用Arraylist theList和dummyValues。我从theList中读取值,并更新了dummyValues中的浮点值。我的代码段如下
`
public static void generateValues(ArrayList<Float> theList) {
for (int j = 0; j < theList.size(); j++) {
if (dummyValues.size()==0)
dummyValues.add(j, theList.get(j));
else
dummyValues.set(j, theList.get(j));
}
}
我尝试在第一个条件中将值添加到ArrayList dummyValues中,如果第二个条件中的dummyValues大小大于0,则仅更新dummyValues的值。我已经考虑过这种方法以避免重复副本。
但是,当我执行它时,出现以下错误:
java.lang.IndexOutOfBoundsException:无效的索引1,大小为1
错误出现在这里
dummyValues.set(j, theList.get(j));
我知道这是一个琐碎的概念,任何帮助都值得赞赏
最佳答案
我建议这种改进。将您的方法更改为此:
public static void generateValues(ArrayList<Float> theList) {
for (int j = 0; j < theList.size(); j++) {
if (dummyValues.size()==0){
dummyValues.add(j, theList.get(j));
}
else if(dummyValues.size()==theList.size()){
dummyValues.set(j, theList.get(j));
}
else{
dummyValues.add(theList.get(j));
}
}
检查两个列表的大小,如果列表大小不同,它将向虚拟列表添加新元素,而不是尝试在不存在的索引上设置元素。
在这种情况下,列表可能不会具有相同的顺序。
编辑:这不是正确的答案!!!抱歉,我的写作速度比思考的快。 :(
仅在
theList.size() > dummyValues.size()
时有效。我会尽量提高我的回答;)EDIT2:再次您好。
做了一些工作,我回来了。我重新设计了您的方法,并且以我认为更好的解决方案为您提供了第二个解决方案。检查一下:
public static void generateValues(List<Float> theList) {
if (dummyValues.size() >= theList.size()) {
for (float value : theList) {
dummyValues.set(theList.indexOf(value), value);
}
}
else {
for (float value : theList) {
dummyValues.add(dummyValues.size(), value);
}
}
}
尝试一下,让我知道它是否适合您的需求。