Java Arraylist of Objects-如何删除条目?
我正在做作业,它说明我必须能够从对象的arraylist中删除条目 我尝试检查它是否包含要删除的用户id,但对象不能包含字符串Java Arraylist of Objects-如何删除条目?,java,swing,object,arraylist,Java,Swing,Object,Arraylist,我正在做作业,它说明我必须能够从对象的arraylist中删除条目 我尝试检查它是否包含要删除的用户id,但对象不能包含字符串 public class EmployeeProgramView extends FrameView { ArrayList <information> database = new ArrayList <information>(); private void exitButtonActionPerformed(java.awt.eve
public class EmployeeProgramView extends FrameView {
ArrayList <information> database = new ArrayList <information>();
private void exitButtonActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {
information a;
String ID, firstName, lastName, startDate, annualSalary, linedUp;
ID = idInput.getText();
firstName = firstNameInput.getText();
lastName = lastNameInput.getText();
startDate = startInput.getText();
annualSalary = salaryInput.getText();
linedUp = (firstName+" "+lastName+" "+annualSalary+" "+startDate);
a = new information (ID, firstName, lastName, startDate,annualSalary);
database.add(a);
System.out.println(linedUp);
}
private void listButtonActionPerformed(java.awt.event.ActionEvent evt) {
String temp="";
for (int x=0; x<=database.size()-1; x++) {
temp = temp + database.get(x).ID + " "
+ database.get(x).first + " "
+ database.get(x).last + " "
+ database.get(x).start + " "
+ database.get(x).salary + "\n";
}
finalOutput.setText(temp);
}
private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {
String removeID;
removeID = idInput.getText();
if (database.contains(removeID)){
database.remove(removeID);
} else {
finalOutput.setText("No such ID in database");
}
}
class information{
String ID, first, last, start, salary;
information(String _ID ,String _first, String _last, String _start, String _salary){
ID = _ID;
first = _first;
last = _last;
start = _start;
salary = _salary;
}
}
public类EmployeeProgramView扩展了FrameView{
ArrayList数据库=新的ArrayList();
私有void exitButtonActionPerformed(java.awt.event.ActionEvent evt){
系统出口(0);
}
私有void addButtonActionPerformed(java.awt.event.ActionEvent evt){
资料a;
字符串ID、firstName、lastName、startDate、annualSalary、linedUp;
ID=idInput.getText();
firstName=firstNameInput.getText();
lastName=lastNameInput.getText();
startDate=startInput.getText();
annualSalary=salaryInput.getText();
linedUp=(firstName+“”+lastName+“”+annualSalary+“”+startDate);
a=新信息(ID、姓氏、姓氏、起始日期、年度日历);
添加(a);
系统输出打印项次(linedUp);
}
private void listButtonActionPerformed(java.awt.event.ActionEvent evt){
字符串temp=“”;
对于(int x=0;x您可能只需要使用方法:List#remove来删除有问题的对象该方法将从数组中删除一个对象,只要在比较该对象和我们请求删除的对象时返回true。对于相同的字符串,这是真的;默认情况下,其他对象仅与其自身相等(仍然可以将对象添加到数组中,并保留另一个引用该对象的变量)
您也可以随时删除它。基本上参见
如果列表包含id与removeid相同的信息,则需要从arraylist中删除对象信息
因此,在删除之前,您需要检查列表中的信息id
所以,在迭代列表中查找每个迭代中的信息,并检查其id Equals以删除
如果等于,则执行列表。删除(信息)
您必须遍历数组并找到要查找的ID。只需将其添加到主类中:
public void removeInformation(ArrayList<Information> database, String removeID) {
for(int i = 0; i < database.size(); i++) {
if(database.get(i).getID().equals(removeID)) {
database.remove(database.get(i));
}
}
}
这样,您就不必在每次使用该类时都键入“java.awt.event.ActionListener ActionListener”。明白了
谢谢大家的意见。真的让我的大脑有了不同的想法哈哈
private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {
String temp, removeID;
removeID = idInput.getText();
for (int x = 0; x<=database.size()-1; x++){
temp = database.get(x).ID;
if(removeID.equals(temp)){
database.remove(x);
}
}
}
private void removeButtonActionPerformed(java.awt.event.ActionEvent evt){
字符串温度,删除;
removeID=idInput.getText();
对于(int x=0;xy)您的问题不清楚。您知道List#remove
方法吗?为什么不能使用此方法?探索API阅读JavaDoc,这与user432的答案是相同的,如果信息#equals()
没有通过测试ID
s的相等性来实现。如果equals()
是通过比较ID
s来实现的,这重复了remove()已经完成的工作
。首先看..这是我自己的回答观点..不是复制粘贴..第二个String类已经重写了equals方法以及information.id和removeid都是字符串,所以这里不需要任何额外的东西..你有什么疑问吗?我没有说这是复制粘贴,我只是说它与(现在已删除)的答案相同回答。然后看一下ArrayList#remove(Object o)
。当您试图删除一个对象时,传递对象的equals()
方法,因此您的答案不仅仅取决于String#equals()
。此外,ArrayList#remove(Object o)
已经遍历了ArrayList
,所以您在这里做了额外的工作,这些工作可能会做,也可能不会做您想做的事情。我同意在删除任何集合的过程中都会考虑传递的对象相等性,不仅是列表..而且我编写的逻辑只是为了展示如何删除它..信息类应该有一个适当的imhashcode和equals方法的实现,以使其在集合中正确运行。.如果信息
需要有equals()和hashcode()的特定实现< /代码>,在你的答案中这样说。如果它们有正确的实现,你所要做的就是创建一个新的<代码>信息< /代码>对象,并具有所需的特性,并移除它,不需要做额外的迭代工作。
比较的不仅仅是ID
字段——此方法不再有效。更好的方法是按索引删除,或者使用迭代器的remove()
method。可能需要小心--如果一行中有两个要删除的对象,则此方法将跳过第二个对象。请反向浏览列表以解决该问题。对于(int x=database.size()-1;x>=0;x--){
import java.awt.event.ActionListener;
private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {
String temp, removeID;
removeID = idInput.getText();
for (int x = 0; x<=database.size()-1; x++){
temp = database.get(x).ID;
if(removeID.equals(temp)){
database.remove(x);
}
}
}