无法从链接列表中删除特定元素

时间:2013-04-19 14:16:17

标签: java 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()
{
}

REGISTRY TESTER文件代码:

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

}

}

3 个答案:

答案 0 :(得分:1)

  1. List定义为List的{​​{1}}

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

    Student
  3. 定义方法:

    public boolean equals(Object obj) {
       if (obj instanceof Student) {
         return studentID == ((Student)obj).getStudentID();
       }
      return false;
    }
    
    public int hashCode() {
       return studentID;
    }
    

答案 1 :(得分:1)

首先,您应该为LinkedList类型设置Student

LinkedList<Student>

然后要删除学生,您可以:

  • 浏览列表,找出具有相同ID的学生对象,将其删除

  • 覆盖equals() and hashcode()课程中的Student方法,然后

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

答案 2 :(得分:0)

如果您有Collection(在您的情况下是LinkedListStudent并且在其上调用remove(studentToRemove),则Java会将每个对象与{{1}进行比较使用其studentToRemove方法。

在您的情况下,您尚未编写equals()方法,因此使用equals()方法。如果学生确实通过其Object唯一标识(即,两个studentId个实例,且Student始终是同一个学生),则应覆盖studentId metod和使用该字段检查是否相等。

了解equals()hashCode()

另一种方法是迭代列表,直到找到匹配项,然后从列表中删除该学生。