搜索对象变量的链接列表

时间:2018-06-18 23:12:25

标签: java linked-list

我需要搜索LinkedList并比较列表中的对象,这样我才不会添加重复项。我无法弄清楚如何拉节点,以便将其与我试图添加的StudentInfo对象进行比较。这是我尝试使用迭代器:

private LinkedList<CourseInfo> classes = new LinkedList<>();

  public void addCourse(String cid, String name, String prof, String days, 
  String time, String room)
  {

     CourseInfo course = new CourseInfo(cid, name, prof, days, time, room);
     Iterator i = classes.iterator();
     while(i.hasNext())
     {
         if(i.equals(course))
         {
             System.out.println("Caught");
             break;
         }

     }

 }

我特别需要比较cid变量

1 个答案:

答案 0 :(得分:2)

次要注意,遍历LinkedList以检查元素是否存在是昂贵的。您可能需要考虑HashSet。话虽如此,在您的代码中,您要将iteratorCourseInfo进行比较,您需要使用next()来比较iterator指向的元素。此外,为了推进迭代器,需要next()(感谢Code-Apprentice的建议)否则你可能会在i.hasNext()中无限循环。

private LinkedList<CourseInfo> classes = new LinkedList<>();

  public void addCourse(String cid, String name, String prof, String days, 
  String time, String room)
  {

     CourseInfo course = new CourseInfo(cid, name, prof, days, time, room);
     // Don't use raw types e.g. Iterator it
     // Specify the type of element you are iterating on
     // Iterator<T> it
     Iterator<CourseInfo> i = classes.iterator();
     while(i.hasNext())
     {
         CourseInfo cInfo = i.next(); // get the element pointed by the iterator
         if(cInfo.equals(course))
         {
             System.out.println("Caught");
             break;
         }
     }
 }

或使用enhanced for-loops

for(CourseInfo ci : classes) {
    if(ci.equals(course)) {
        System.out.println("Caught");
        break;
     }
}