当前位置: 首页 > 知识库问答 >
问题:

如何在链表中按属性删除对象?

太叔乐家
2023-03-14

我如何删除Linkedlist中的对象。我有一个类帐户,里面有学生ID和学生名称。我输入列表中的对象,但是当我试图删除时,我不知道如何做。因为每次你从列表中间删除一个元素,它就会变得有组织,这意味着索引会改变。所以我如何获得学生ID属性并删除LinkedList中的对象。

样本:

LinkedList: Account{studentId = 1, studentName = nome1} = index = 0 , 
LinkedList: Account{studentId = 2, studentName = nome2} = index = 1 , 
LinkedList: Account{studentId = 3, studentName = nome3} = index = 2.

我想让用户插入他想要删除的studentId,我可以做一个搜索和删除该对象的代码。

public Account{
    private int studentID;
    private String StudentName;
}

public static void main(String[] args){

    int accountNumber;

    LinkedList<Account> linkedAccount = new LinkedList<>();
    Account obj1;

    System.out.println("Type the acc number: ");
    accountNumber = in.nextInt();
    obj1 = linkedAccount.remove(accountNumber);
    System.out.println("The " + obj1 + " has been deleted");
}

每次我从中间删除一个对象,它就会改变链接列表的索引。重新排列。所以我不知道怎么做,你能帮我吗?

共有3个答案

孟浩然
2023-03-14

我认为最好的选择是通过学生ID搜索列表中的帐户,然后将其删除。

public Account{
    private int studentID;
    private String StudentName;

    public int getStudentID() {
       return this.studentID;
    }
}

public static void main(String[] args){

   int accountNumber;

   LinkedList<Account> linkedAccount = new LinkedList<>();
   Account obj1;

   System.out.println("Type the acc number: ");
   accountNumber = in.nextInt();
   for (int i = 0; i < linkedAccount.size(); i++) {
      if (accountNumber == linkedAccount.get(i).getStudentID()) {
         System.out.println("The student " + linkedAccount.get(i).getStudentID() + " has been deleted");
         linkedAccount.remove(i);
         break; // This is to exit for loop, but if you want to delete every instance in the list with this ID you can skip this break
      }
   }
}
祝宏放
2023-03-14

目前,您正在使用帐户号作为不正确的索引,而是在列表上循环,找到对象的索引,然后删除:

for (int i = 0; i < linkedAccount.size(); i++) {
     if (linkedAccount.get(i).getStudentID() == accountNumber) {
         obj1 = linkedAccount.remove(i);
         break;
     }
}

此外,为什么要使用LinkedList而不是ArrayList?后者几乎总是有利的。

习华灿
2023-03-14

>

  • 如果您不需要保留对所移除对象的引用,您可以只

    linkedAccount.removeIf(acc -> acc.getStudentID() == accountNumber);
    

    如果你想保留对你删除的元素的引用,你可以

    for (Account acc : linkedAccount) {
        if (acc.getStudentID() == accountNumber) {
            obj1 = acc;
            linkedAccount.remove(acc);
            break;
        }
    }
    
    // OR
    
    for (int i = 0; i < linkedAccount.size(); i++) {
        if (linkedAccount.get(i).getStudentID() == accountNumber) {
            obj1 = linkedAccount.remove(i);
            break;
        }
    }
    

    请注意,在大多数情况下,基本上,ArrayList在Java中使用LinkedList而不是ArrayList时就足够了?

  •  类似资料:
    • 问题内容: 说我创建一个对象,如下所示: 删除该属性以使其最终成为new 的最佳方法是什么? 问题答案: 像这样: 演示版

    • 问题内容: 我的代码有一个问题,我做了一个示例程序来显示链接列表中的emp详细信息,现在当我尝试删除特定条目时出现问题意味着它无法正常工作,希望我在代码中犯了一些错误你能建议怎么做吗? 问题答案: 您无法在列表(添加,删除…项目)上进行迭代操作。您必须使用迭代器 参见http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html

    • 从 JSON 对象删除除了指定属性之外的任何其他属性。 使用 Object.keys() 方法遍历给定的 JSON 对象并删除给定数组中不包含的 keys 。 如果你传递一个特殊的键 childIndicator ,它也会深入地将这个函数应用到内部对象中。 const cleanObj = (obj, keysToKeep = [], childIndicator) => { Object.k

    • 我有一个具有和属性的对象数组: 我想从所有对象中删除属性,并在控制台中打印,如

    • 我正在尝试从对象数组中删除属性。 我希望var2包含这样的内容。 是否有方法将/cast转换为上述内容?换句话说,我想从对象数组中删除,并将其分配给。我该怎么做?

    • 我怎么能找到一个对象,,在