Java:使用其值删除ArrayList中的元素

时间:2015-12-09 05:08:21

标签: java arraylist

我被要求为我的作业演示 Singleton类设计。我提交的版本使用字符串并且工作正常,但我无法使 reserveLane 方法与整数一起正常工作。每当我在下面的代码中调用 reserveLane 方法时,它会删除传递给它的整数索引的元素,而不是包含与传入的整数匹配的值的元素。该程序应该在 removeLane 方法中打印每条消息一次。

import java.util.*;

public class Race {
    // store one instance
    private static final Race INSTANCE = new Race(); // (this is the singleton)
    List<Integer> lanes = new ArrayList<>();
    public static Race getInstance() { // callers can get to
        return INSTANCE; // the instance
    }

    private Race() {
        lanes.add(1);
        lanes.add(2);
    }

    public void removeLane(int lane) {
        if(lanes.contains(lane)){
            lanes.remove(lane);
            System.out.println("Lane successfully reserved.");
        } else {
            System.out.println("Lane is already reserved.");
        }
    }

    public static void main(String[] args) {
        assignLane(1);
        assignLane(1);
    }

    private static void assignLane(int lane) {
        Race race = Race.getInstance();
        race.removeLane(lane);
    }
}

我想知道我是否在浪费时间尝试这条路线,还是有办法解决这个问题?

3 个答案:

答案 0 :(得分:3)

Integer integer = new Integer(lane);
lanes.remove(integer);

您的lanesInteger个对象的arraylist,而不是int。将int传递给Arraylist.remove(int index)将删除该索引处的对象,但如果传递Integer对象,则remove()函数将删除该对象的第一个匹配项。< / p>

答案 1 :(得分:0)

您正在使用基本类型来删除元素。您可以将它转换为Wrapper类并执行它。更改removeLane方法,如下所示:

public void removeLane(Integer lane) {
    if(lanes.contains(lane)){
       lanes.remove(lane);
       System.out.println("Lane successfully reserved.");
}
    else{
        System.out.println("Lane is already reserved.");
    }

}

答案 2 :(得分:0)

ArrayList文档

  

E remove(int index) - 删除此列表中指定位置的元素。

     

boolean remove(Object o) - 从该列表中删除指定元素的第一个匹配项(如果存在)。

由于您已向方法int发送了remove原始类型,因此已调用remove(int index)。而只是发送一个Integer对象,然后它将调用方法remove(Object o),它将正常工作。

工作代码:

package stackoverflow;

import java.util.ArrayList;
import java.util.List;

public class Race {

    private static final Race INSTANCE // store one instance
            = new Race(); // (this is the singleton)
    List<Integer> lanes = new ArrayList<>();

    public static Race getInstance() { // callers can get to
        return INSTANCE; // the instance
    }

    private Race() {
        lanes.add(1);
        lanes.add(2);
    }

    public void removeLane(int lane) {
        if (lanes.contains(lane)) {
            lanes.remove((Integer) lane);
            System.out.println("Lane successfully reserved.");
        } else {
            System.out.println("Lane is already reserved.");
        }

    }

    public static void main(String[] args) {
        assignLane(1);
        assignLane(1);
    }

    private static void assignLane(int lane) {
        Race race = Race.getInstance();
        race.removeLane(lane);
    }
}