首页 > 解决方案 > 如何在链接列表中按属性删除对象?

问题描述

如何删除 Linkedlist 中的对象。我有一个带有 studentId 和 studentName 的班级帐户。我在列表中输入了对象,但是当我尝试删除时,我不知道该怎么做。因为每次从列表中间删除一个元素时,它都会被组织起来,这意味着索引会发生变化。那么如何获取 studentId 属性并删除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");
}

每次我从中间删除一个对象时,它都会更改linkedList 的索引。重新排列。所以我不知道该怎么做你能帮我吗?

标签: javadata-structureslinked-list

解决方案


  1. 如果您不需要保留对您删除的对象的引用,您可以

    linkedAccount.removeIf(acc -> acc.getStudentID() == accountNumber);
    
  2. 如果您想保留对您删除的元素的引用,您可以

    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;
        }
    }
    
  3. 请注意,在大多数情况下,基本上一个ArrayList就足够了 何时在 Java 中使用 LinkedList 而不是 ArrayList?


推荐阅读