所以我试图创建一个方法,将一个arraylist中的所有元素向右移动,最后一个元素将成为第一个元素。当我运行代码时,我被告知我有一个越界错误。以下是我到目前为止的情况:
public void shiftRight()
{
//make temp variable to hold last element
int temp = listValues.get(listValues.size()-1);
//make a loop to run through the array list
for(int i = listValues.size()-1; i >= 0; i--)
{
//set the last element to the value of the 2nd to last element
listValues.set(listValues.get(i),listValues.get(i-1));
//set the first element to be the last element
listValues.set(0, temp);
}
}
答案 0 :(得分:7)
也许这是您正在进行的练习,但ArrayList.add(int index,E element)方法几乎可以完成您想要的练习。
"将指定元素插入此列表中的指定位置。 将当前位置的元素(如果有)和右侧的任何后续元素移位(在其索引中加1)。" (斜体添加)
所以只需在位置0添加列表中的最后一个元素。然后从最后删除它。
答案 1 :(得分:4)
这里有一些问题:
i > 0
,否则您将到达要将元素放置在-1
位置{{1}的位置导致越界错误。 listValues.set
将列表中的索引作为第一个参数,您将它列为列表中的对象
0
答案 2 :(得分:1)
最简单,最短的解决方案:(如果您没有同时使用列表-由于在同时使用和对其进行迭代时,列表大小不应更改,否则会出现 ConcurrentModificationException )
public void shiftOneToRight() {
listValues.add(0, listValues.remove(listValues.size() - 1));
}
答案 3 :(得分:0)
my code to put a number in the right place in a List
int nr = 5; // just a test number
boolean foundPlace = false;
for(int i = 0; i < integerList.size(); i++){
if(nr <= integerList.get(i)){
integerList.add(i,nr);
foundPlace = true;
break;
}
}
if (!foundPlace)
integerList.add(integerList.size(), nr);
如上所述,“integerList.add(element)”将指定的元素插入此列表中的指定位置。目前转移元素......
答案 4 :(得分:0)
输入数组列表: locationMap
以循环方式从 idxStart 中转移LHS元素
转换后的输出列表: extendedList
// make extended list to behave like circular
List<String> extendedList = new ArrayList<>();
for (int i = idxStart; i < locationMap.size(); i++) { // current to end
extendedList.add(locationMap.get(i));
}
for (int i = 0; i < idxStart; i++) { // 0 to current
extendedList.add(locationMap.get(i));
}
答案 5 :(得分:0)
这是最简单的解决方案
Collections.rotate(list,rotationPosition);