java-封装在链表中的工作方式
作者:互联网
说我有两个类ListNode和List.
public class List{
private ListNode head;
public List(){head = null;}
public void insertFront (int obj)
{
head = new ListNode(obj, head);
}
// other methods to be declared
public boolean isEmpty(){...}
public Object removeFront() {...}
public Object removeBack(){...}
public void insertBack(Object value){...}
public ListNode nth(int i){...}
public void insertAfter(ListNode node, Object value){...}
}
public class ListNode{
public Object item;
public ListNode next;
public ListNode(Object value,ListNode next){
this.item = value;
this.next=next;
}
public ListNode(Object value){
this(value,null);
}
}
在我观看的视频中,它说List的任何方法都不返回ListNode,因此不能篡改单个节点.外部类无法获得对列表中Node的引用.
这是否意味着一旦我创建了一个列表
List list=new List();
list.insertFront("a");
list.insertFront("b");
list.insertFront("c");
外部类无法更改此特定列表.但是,外部类仍然可以创建单独的链表吗?
public class A{
public static void main (String args[]){
ListNode list=new ListNode("a");
System.out.println(list.item);
}
}
在A类上时,是否可以访问在List类中创建的项目?
有人可以解释一下封装是如何工作的,因为我是Java和编程的新手,但我仍在尝试理解封装的概念.
解决方法:
您可以在List类中定义ListNode类,而不是创建两个不同的类.这样,您将隐藏使用ListNode类的内部表示.
另外,链表支持的基本API是
public void addItem(int val);
public void removeItem(int val)
public int size()
list.insertFront()可以在list类中轻松实现.列表类将具有字段“ head”,该字段将成为链接列表的头.因此,要在链表的最前面插入一个节点,您要做的就是更改链表的头.现在,无需将头参考传递回调用类.
removeFront,removeBack等可以类似地实现.
但是,如果要删除链表中的特定节点,则必须更改API和实现.即,我们还没有添加从链接列表中删除特定节点的功能.当前的remove方法将int值而不是Node类的对象作为参数.
您可以在Java here中找到一个双向链接列表类的实现.由于普林斯顿大学的教授教该实现,因此我发现此实现可靠.
标签:data-structures,encapsulation,linked-list,java 来源: https://codeday.me/bug/20191121/2054456.html