如何在java中将Arraylist中的元素移到右边

时间:2015-09-03 23:54:09

标签: java arraylist

所以我试图创建一个方法,将一个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); 
    }

}

6 个答案:

答案 0 :(得分:7)

也许这是您正在进行的练习,但ArrayList.add(int index,E element)方法几乎可以完成您想要的练习。

"将指定元素插入此列表中的指定位置。 将当前位置的元素(如果有)和右侧的任何后续元素移位(在其索引中加1)。" (斜体添加)

所以只需在位置0添加列表中的最后一个元素。然后从最后删除它。

答案 1 :(得分:4)

这里有一些问题:

  1. 您的for循环条件需要排除第0个元素,因此它应该是i > 0,否则您将到达要将元素放置在-1位置{{1}的位置导致越界错误。
  2. 将第一个元素设置为最后一个元素应该在循环之外。
  3. 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);