Java 如何从列表中删除项目<>;?

Java 如何从列表中删除项目<>;?,java,android,list,arraylist,Java,Android,List,Arraylist,我正在开发一个应用程序,它包含一个票证列表,用户有添加票证和删除票证选项。add选项可以正常工作,但是remove选项不行,下面是票证列表代码 public class TicketList { private List<Ticket> ticketList; public TicketList() { ticketList = new ArrayList<>(); } public List<Ticket>

我正在开发一个应用程序,它包含一个票证列表,用户有添加票证和删除票证选项。add选项可以正常工作,但是remove选项不行,下面是票证列表代码

public class TicketList {

    private List<Ticket> ticketList;

    public TicketList() {
        ticketList = new ArrayList<>();
    }

    public List<Ticket> getTicketList() {
        return ticketList;
    }

    public void setTicketList(List<Ticket> ticketList) {
        this.ticketList = ticketList;
    }

    public void addTicketToList(Ticket ticket) {
        ticketList.add(ticket);
    }

    public void removeFromList(Ticket ticket) {
        ticketList.remove(ticket);
    }

    @Override
    public String toString() {
        return "TicketList{" + "ticketList=" + ticketList + '}';
    }
}
添加功能工作正常时:

private void saveTicket() {
    TicketList ticketList = MyPreferencesManager.getInstance(this).getTicketList();
    Ticket ticket = new Ticket();
    ticket.setUsername(username.getText().toString());
    ticket.setPassword(password.getText().toString());
    ticketList.addTicketToList(ticket);
    MyPreferencesManager.getInstance(this).putTicketList(ticketList);
}

有人能告诉我删除或删除功能有什么问题吗?

这是因为当您使用以下代码时:

ticketList.remove(ticket);
删除方法将在删除前检查列表中是否有准确的对象项。因此,您的ticket对象可能在您试图从列表中删除它之前已经被更改了

您可以从以下位置查看详细信息:

公共抽象布尔删除(对象o)

从此列表中删除指定元素的第一个匹配项, 如果存在(可选操作)。如果此列表不包含 元素,它是不变的。更正式地说,使用 最低索引i(o==null?get(i)==null: o、 等于(get(i))(如果存在这样的元素)。如果出现以下情况,则返回true 包含指定元素的列表(如果此列表 因呼叫而更改)


您需要的可能是。

您所说的“它不起作用”是什么意思?什么都没发生吗?它会崩溃吗?还要看看有问题的票是否在名单上。您可能必须重写
Ticket
类的
equals
hashCode
函数,才能使其工作。不,我的意思是,没有发生任何事情,更清楚地说,当我在添加之前和之后获取日志时,我可以在logcat中看到结果,但对于删除项,调用delete函数后没有任何变化如果在
Ticket
类中没有定义
equals
方法,Java只能通过引用而不是值来比较Ticket,这将导致在匹配列表中的正确对象时出错。我不同意你的回答,我相信OP希望通过对象而不是索引删除票据。为此,需要重写
Ticket
classes
equals
方法。
ticketList.remove(ticket);