在实现链接列表时创建具有相同名称的对象

时间:2017-09-01 13:05:37

标签: java algorithm data-structures linked-list

我是Java的新手,我在下面找到了这个链表实现。在main方法中,我们创建一个名为theLinkedList的LinkList实例,并使用它调用insertFirstLink方法4次。 InsertFirstLink方法的作用是创建名为newLink的Link实例。当我们调用insertFirstLink 4次时。

此方法是否创建了4个具有相同名称的链接实例(newLink)? 怎么可能? 我们不能创建具有相同名称的对象吗? 我缺少什么?我需要学习什么来理解这一部分?

谢谢你们。我理解我的问题。每次执行后,新链接变量都会被销毁,但每个被销毁的变量都有一个引用,它就像一条线。我们总是可以通过该行找到我们想要的节点。

{{1}}

4 个答案:

答案 0 :(得分:1)

public void insertFirstLink(String bookName, int millionsSold) {
     Link newLink = new Link(bookName, millionsSold);
     newLink.next = firstLink;
     firstLink = newLink;
}

此方法不会创建具有相同名称的相同变量4次,因为变量newLink范围仅在方法范围内有效。因此,每次调用此方法时,都会创建一个新变量,然后在执行该方法之后销毁该变量。您不能在同一方法或类中创建具有相同名称的变量。

例如,这将无效:

public void insertFirstLink(String bookName, int millionsSold) {
     Link newLink = new Link(bookName, millionsSold);
     newLink.next = firstLink;
     firstLink = newLink;
     Link newLink = new Link(bookName, millionsSold);
}

因为变量是以相同的方法声明的。

您可以阅读this以更好地了解变量范围

编辑:要循环到此列表,您可以使用简单的while:

// boolean used to exit the loop
boolean found = false;
// save firstLink to another object, this way you will not modify the linked list while looping
Link link = theLinkedList.firstLink;

while(!found)
{
      // if line.next != null you have another element in the list, so save it into link and go forward on the loop
      if(link.next != null)
      {
          link = link.next;
      }
      else
      {
          // here you are one the first inserted element
          // set found to true to exit while loop
          found = true;
          //this will print "Don Quixote 500"       
          System.out.print(link.bookName + " " + link.millionsSold);
      }

  }

答案 1 :(得分:0)

对象没有"名称"。这一行:

Link newLink = new Link(bookName, millionsSold);

只需声明一个名为newLink的变量。变量名称在可见性范围内必须是唯一的,因此这是不可能的:

public void insertFirstLink(String bookName, int millionsSold) {

    Link newLink = new Link(bookName + " one", millionsSold);
    Link newLink = new Link(bookName + " two", millionsSold);
    ...
}

然而这是可能的:

public void insertFirstLink(String bookName, int millionsSold) {

    { Link newLink = new Link(bookName + " one", millionsSold); }
    { Link newLink = new Link(bookName + " two", millionsSold); }
    ...
}

答案 2 :(得分:0)

insertFirstLink()在链接列表的前面添加一个新链接。您在main的每次通话中使用不同的参数调用该函数四次。对于每个调用,函数调用链接构造函数Link(),并将参数传递给函数。然后,新创建的Link的下一个字段被设置为指向LinkedList中的第一个链接。然后firstlink设置为指向刚刚创建的新链接。

答案 3 :(得分:0)

  

我需要学习什么才能理解这一部分?

您需要详细研究java中的变量范围