编程语言
首页 > 编程语言> > java-封装在链表中的工作方式

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