移动ArrayList

时间:2012-03-04 03:32:52

标签: java arraylist

我编写了一个具有add和get方法的SortedIntList类。

我称之为以下四种方法:

SortedIntList mySortedIntList = new SortedIntList();
mySortedIntList.add(9);
mySortedIntList.add(7);
System.out.println("0 is :"+mySortedIntList.get(0));
System.out.println("1 is :"+mySortedIntList.get(1));

我的get和add方法如下所示:

public void add(Integer newValue) {
    int position = 0;
    while(position < list.size()){
        int currentPosValue = list.get(position);
        if(newValue <= currentPosValue){
            for(int i=list.size()-1; i>=position; i--){
                int toBeShifted = list.get(i);
                list.set(i+1, toBeShifted);
            }
            list.set(position, newValue);
            return;
        }
        position++;
    }
    list.add(newValue);
}


       public int get(int i) throws IndexOutOfBoundsException {
    // Postcondition: If i < 0 or i >= size() throws 
    // IndexOutOfBoundsException, otherwise returns the value 
    // at position i of this IntList
    if (i < 0 || i >= list.size()) {
        throw new IndexOutOfBoundsException("SortedIntList.get");
    } else {
        return ((Integer) list.get(i)).intValue();
    }
}





    public int get(int i) throws IndexOutOfBoundsException {
        // Postcondition: If i < 0 or i >= size() throws 
        // IndexOutOfBoundsException, otherwise returns the value 
        // at position i of this IntList
        if (i < 0 || i >= list.size()) {
            throw new IndexOutOfBoundsException("SortedIntList.get");
        } else {
            return ((Integer) list.get(i)).intValue();
        }
    }

我已经把它写在纸上了,这似乎是合乎逻辑的,但代码却爆发了:

System.out.println("1 is :"+mySortedIntList.get(1))行,显然1是不合时宜的,但我不知道如何。

4 个答案:

答案 0 :(得分:1)

阅读Java Doc有帮助。显然使用set()要求在您尝试覆盖的位置已经存在一个值。我需要使用add(position,value)代替: - )

答案 1 :(得分:0)

使用Collections.sort()可能更容易,这个标准的Java方法会为你排序你的Collection。这样你就不用自己处理排序了,祝你好运!

答案 2 :(得分:0)

我看到了一些问题。

首先,list.set(i+i, toBeShifted);应该是list.set(i+1, toBeShifted);。当您向列表中添加7时,列表大小为1.在for循环中,将i初始化为0(列表大小 - 1)。当你调用list.set(i + i,toBeShifted)时,你正在调用list.set(0,toBeShifted),所以实际上没有移动值。

其次,虽然你没有加入9然后再加上7来遇到它,你将会在无限循环中结束。你永远不会改变位置的价值。如果你添加一个9然后再添加一个更大的数字,你就会被淹没。

答案 3 :(得分:0)

您无法使用列表的set()添加到列表中:例如,如果您尝试将索引1处的内容设置为大小为1的列表中的内容,则会获得{{1} }。

基本上,您需要先IndexOutOfBoundsException