Java 如何从列表中删除项目<>;?
我正在开发一个应用程序,它包含一个票证列表,用户有添加票证和删除票证选项。add选项可以正常工作,但是remove选项不行,下面是票证列表代码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>
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
classesequals
方法。
ticketList.remove(ticket);