簡體   English   中英

無法從鏈接列表中刪除特定元素

[英]Having trouble removing a specific element from a linked list

我已經設置了一個賦值,以鏈接列表的形式創建一個用Java編寫的基於寄存器的小程序。 我首先創建了一個學生類,然后是該類的測試文件。 接下來,在注冊表文件中,我已經設置了我的方法和構造函數,並且正在編寫測試文件以測試我的所有方法。

但是我在嘗試從鏈接列表中刪除特定元素時遇到問題,我希望能夠刪除學生,通過他們的個人學生ID引用他們,但我不知道如何做到這一點。

在嘗試解決問題的同時,我遇到了removeFirstOccurrence(Object o)方法。 這是正確的使用方法嗎?

任何幫助將非常感激。

學生文件代碼:

public class Student {

private String foreName;
private String surName;
private int studentID;

//declaring the variables needed for my student


public Student (String foreName, String surName, int studentID)
{
    this.foreName = foreName;
    this.surName = surName;
    this.studentID = studentID;
}
//constructor to set out what a student needs



public String getForeName() {
    return foreName;
}

public String getSurName() {
    return surName;
}

public int getStudentID() {
    return studentID;
}

public void setForeName(String foreName) {
    this.foreName = foreName;
}

public void setSurName(String surName) {
    this.surName = surName;
}

public void setStudentID(int studentID) {
    this.studentID = studentID;
}

// getters and setters for my variables

public String toString ()
{

    return getClass().getName() + "foreName = " + foreName + "surName = " + surName + "studentID = " + studentID;
}
//my toString method

}

注冊檔案代碼:

import java.util.*;
public class Registry {


LinkedList<String> studentList
        = new LinkedList<String>();
//setting my type parameter


public Registry() {}
//empty constructor to hold arguements

public void addStudent(String aStudent)
{
    this.studentList.addLast(aStudent);
}



public void deleteStudent(int studentID) 
{
    //????         
}


@Override public String toString()
{
  return "Registry";
}



public String format()
{
}

注冊管理機構測試文件代碼:

import java.util.*;

public class RegistryTester {
public static void main (String[] args)
{
    LinkedList<String> studentList
            = new LinkedList<String>();




    System.out.println("Test 1");
    System.out.println("Methods tested: addStudent, constructor");
    System.out.println("********************");

    studentList.add("Joe Perkins 123");        
    studentList.addLast("Shilpa Gupta 1234");
    studentList.addLast("Seany Ray 12345");
    // adding 3 students to my list

    System.out.println(studentList);

}

}
  1. List定義為Student List

     LinkedList<Student> studentList = new LinkedList<Student>(); 
  2. 覆蓋Student類中的hashCode()equals()方法。

     public boolean equals(Object obj) { if (obj instanceof Student) { return studentID == ((Student)obj).getStudentID(); } return false; } public int hashCode() { return studentID; } 
  3. 定義方法:

     public void addStudent(Student aStudent) { this.studentList.addLast(aStudent); } public void deleteStudent(Student astudent) { this.studentList.remove(aStudent) } 

首先,您應該為類型Student創建LinkedList

LinkedList<Student>

然后要刪除學生,您可以:

  • 瀏覽列表,找出具有相同ID的學生對象,將其刪除

  • 然后,在您的Student類中重寫equals() and hashcode()方法

     public void deleteStudent(int studentID) { //getStudent object (stu) By the given ID studentList.remove(stu); } 
  • 使用Map ,( HashMapLinkedHashMap )代替LinkedList ,key是studentId,value是studentObject。 這將使添加/刪除更容易。

如果你有一個StudentCollection (在你的情況下是一個LinkedList )並且在其上調用remove(studentToRemove) ,Java將使用equals()方法將每個對象與studentToRemove進行比較。

在您的情況下,您還沒有編寫equals()方法,因此使用了Object的方法。 如果學生確實由studentId唯一標識(即,具有相同studentId兩個Student實例始終是同一個學生),則應覆蓋equals() metod並使用該字段檢查是否相等。

閱讀有關equals()hashCode()的信息

另一種方法是迭代列表,直到找到匹配項,然后從列表中刪除該學生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM