【问题标题】:Arraylist of Objects - How do I remove an entry?Arraylist of Objects - 如何删除一个条目?
【发布时间】:2014-07-21 21:50:37
【问题描述】:

我正在做作业,它指出我必须能够从对象数组列表中删除一个条目。

我尝试检查它是否包含我要删除的用户 ID,但对象不能包含字符串

 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;
    }
}

}

所以我的问题是?如何删除对象?

【问题讨论】:

  • 您的问题不清楚。你知道List&lt;T&gt;#remove 方法吗?为什么不能用这个?
  • 探索API阅读ArrayList的JavaDoc

标签: java swing object arraylist


【解决方案1】:

remove 方法将从数组中删除一个对象,只要 .equals 在比较该对象和我们要求删除的对象时返回 true。这适用于相同的字符串;默认情况下,其他对象只等于它们自己(不过,您可以将一个对象添加到数组并保留另一个引用它的变量)。

您也可以只删除by array index

【讨论】:

    【解决方案2】:

    你可能只需要使用方法:List#remove,来移除有问题的对象

    【讨论】:

      【解决方案3】:

      知道了!

      感谢大家的意见。真的让我的大脑以不同的方式思考哈哈。

          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);
              }
          }
      }
      

      【讨论】:

      • 可能要小心——如果您要删除一行中有两个对象,此方法将跳过第二个。
      • 通过列表倒退来解决这个问题。 for (int x = database.size()-1; x>=0; x--){
      【解决方案4】:

      您必须遍历数组并找到您要查找的 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));
              }
          }
      }
      

      这与您的问题无关,但按照惯例,类以大写字母命名,因此您的“信息”类应命名为“信息”。

      另外,我只想说,如果你不知道,在你输入你的类之前,你可以输入 import 语句。例如:

      import java.awt.event.ActionListener;
      

      这样,您不必每次想使用该类时都键入“java.awt.event.ActionListener actionListener”。

      【讨论】:

        【解决方案5】:

        基本看,

        如果列表包含id与removeid相同的信息,则需要从arraylist中删除对象信息。

        所以在删除之前,你需要检查列表中的信息id

        所以去迭代列表并在每次迭代中查找信息并检查其 id equlas to removeid

        如果等于则执行 list.remove(information)

        for (Information information: database) {
            // check for ID is same as remove id
           // if equals remove that entire object from list
        
            if (information.ID.equals(removeID)) {
                // remove object with ID same as removeid
                database.remove(information);
            }
        }
        

        【讨论】:

        • 这与 user432 的答案相同,如果 Information#equals() 没有通过测试 IDs 的相等性来实现,则将不起作用。如果equals() 是通过比较IDs 实现的,那么这会重复remove() 已经完成的工作。
        • 首先查看..这是我自己的回答观点..不是复制粘贴...第二个 String 类已经覆盖了 equals 方法,而且 information.id 和 removeid 都是字符串,所以不需要这里有什么额外的东西......你有什么疑问?
        • 我没有说这是复制/粘贴,我只是说它与(现已删除)答案相同。看看ArrayList#remove(Object o)。当您尝试删除对象时,传递对象的equals() 方法,因此您的答案不仅仅取决于String#equals()。此外,ArrayList#remove(Object o) 已经对ArrayList 进行了遍历,所以你在这里做了额外的工作,可能会做也可能不会做你想做的事
        • 我同意在删除任何集合期间将考虑传递的对象相等性,而不仅仅是列表..但我编写逻辑只是为了展示如何删除它..信息类应该有一个适当的实现 hashcode 和 equals 方法以使其与集合正常运行..
        • 如果Information 需要有equals()hashCode() 的特定实现,请在您的回答中说明。如果他们有正确的实现,您所要做的就是创建一个具有所需特征的新 Information 对象并将其删除,无需进行额外的迭代工作。想想如果Information#equals() 不仅仅比较ID 字段会发生什么——这种方法将不再有效。更好的方法是按索引删除,或者使用迭代器的remove() 方法。
        猜你喜欢
        • 2015-02-13
        • 1970-01-01
        • 2014-09-16
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 2019-03-15
        • 1970-01-01
        • 2019-09-23
        相关资源
        最近更新 更多