Java 在实现链表时创建同名对象
我是Java新手,我在下面找到了这个链表实现。在main方法中,我们创建一个名为linkedlist的LinkList实例,并使用它调用insertFirstLink方法4次。InsertFirstLink方法所做的是创建一个名为newLink的链接实例。当我们调用insertFirstLink 4次时 此方法是否创建4个同名链接实例(newLink)? 这怎么可能? 我们不能创建同名的对象,对吗? 我遗漏了什么?我需要学习什么才能理解这一部分 谢谢大家。我理解我的问题。在每次执行之后,新的链接变量都会被销毁,但是每个被销毁的变量都有一个引用及其类似的行。我们始终可以通过线路找到所需的节点。Java 在实现链表时创建同名对象,java,algorithm,data-structures,linked-list,Java,Algorithm,Data Structures,Linked List,我是Java新手,我在下面找到了这个链表实现。在main方法中,我们创建一个名为linkedlist的LinkList实例,并使用它调用insertFirstLink方法4次。InsertFirstLink方法所做的是创建一个名为newLink的链接实例。当我们调用insertFirstLink 4次时 此方法是否创建4个同名链接实例(newLink)? 这怎么可能? 我们不能创建同名的对象,对吗? 我遗漏了什么?我需要学习什么才能理解这一部分 谢谢大家。我理解我的问题。在每次执行之后,新的链接
public class Link {
public String bookName;
public int millionsSold;
public Link next;
public Link(String bookName, int millionsSold) {
this.bookName = bookName;
this.millionsSold = millionsSold;
}
public static void main(String[] args) {
LinkList theLinkedList = new LinkList();
theLinkedList.insertFirstLink("Don Quixote",500);
theLinkedList.insertFirstLink("A Tale of two cities",200);
theLinkedList.insertFirstLink("The Lord Of The Rings",150);
theLinkedList.insertFirstLink("Harry Potter",1000);
}
}
class LinkList {
public Link firstLink;
LinkList() {
firstLink = null;
}
public boolean isEmpty() {
return(firstLink == null);
}
public void insertFirstLink(String bookName, int millionsSold) {
Link newLink = new Link(bookName, millionsSold);
newLink.next = firstLink;
firstLink = newLink;
}
}
对象没有“名称”。这一行:
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); }
...
}
但是,这是可能的:
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); }
...
}
此方法不会创建具有相同名称的同一变量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);
}
因为变量是在同一个方法中声明的
您可以阅读以更好地理解变量范围
编辑:要循环到此列表中,您可以使用简单的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);
}
}
insertFirstLink()
将新链接添加到链接列表的前面。在main
中的每次调用中,您将使用不同的参数调用函数四次。对于这些调用中的每一个,函数都会调用链接构造函数Link()
,并将参数传递给函数。然后,新创建的链接的下一个字段设置为指向LinkedList中的第一个链接。然后将firstlink
设置为指向刚创建的新链接
我需要学习什么才能理解这一部分
您需要详细研究java中变量的作用域。变量(不是对象,它们没有名称)名称的作用域必须是唯一的。列表节点没有名称newLink
是对新创建对象的本地引用。我建议您检查变量类型和作用域。我认为实例是一个对象。但是没有名字,编译器如何识别它。你能告诉我更多的细节吗?谢谢你的回复。我将进一步回顾newLink
实际上并不是一个对象本身。它是一个保存对象引用的变量。该变量可以在某一时刻指向对象X,然后指向对象Y。它甚至可以根本不指向任何对象,那就是说变量包含空引用的时候。你能告诉我我需要学习什么才能理解这一点吗。例如Bruce Eckel-Java思维。如果变量在执行后被销毁,我们如何才能获得链表中每个节点的详细信息?我很困惑。因为在方法的最后一行(firstLink=newLink;
)中,newLink
变量的值被分配给firstLink
,该变量被声明为公共链接firstLink代码>在类LinkList
中,并且具有类作用域。好的,我在列表中添加了4个节点。现在,第一个Link变量最后添加了书籍细节(“哈利波特”)。现在我想获取firstLink.next详细信息。但是如果我们删除了旧的newLink变量,那么我们如何访问旧的变量呢?我编辑了我的答案,解释了如何获取旧的元素谢谢。现在我明白了。