Java8——链表(19章重点)

基本概念:

链表和数组相比的优势是:没有长度限制,也就是一个动态对象数组;

链表是一种基本的数据结构,链表主要目的是依靠引用关系来实现多个数据的保存;

对于所有节点操作,由于不知道要循环多少次,所以只能够使用while循环,但是递归函数比直接使用while函数更好。

链表保存的是当前的内容,以及指向的下一个节点(客户端不关注)

Node实际上是设置数据和取数据(客户端的主要操作)的过程,那为什么需要Node?

  • 由于数据本身不具备先后关系,所以要使用Node类来封装数据,同时利用Node类指定下一个节点;

链表的基本实现:

链表的基本操作特点:

  • 客户端不关注具体Node以及引用关系的细节,只关注Link类中提供的方法(数据的保存,数据的输出);
  • Link类主要功能是控制Node类对象的产生和根节点;
  • Node类主要负责数据的保存以及引用关系的分配;

确定程序结构:

class Link{   ///链表类,外部只能看见这个类
    // 之所以定义在内部,主要是让其为Link类服务
    private class Node{   //定义节点类
        private String data;   //保存数据
        private Node next;   //引用关系
        public Node(String data){
            this.data = data;
        }
    }
    //————————————以上为内部类————————————

    private Node root;   //需要根节点
}

随后就是对代码的填充以及功能的实现;

数据增加:

  • public void add(数据类型 变量):普通方法,向链表增加新的数据;

如果进行新数据的增加,应该由Link类负责节点对象的产生,由Link类维护根节点,所有关系的匹配交给Node类;

class Link{   ///链表类,外部只能看见这个类

    // 之所以定义在内部,主要是让其为Link类服务
    private class Node{   //定义节点类
        private String data;   //保存数据
        private Node next;   //引用关系
        public Node(String data){
            this.data = data;
        }

        public void addNode(Node newNode){
            if(this.next == null){   
                this.next = newNode;    
            }else{ 
                this.next.addNode(newNode);
            }
        }

    }
    //————————————以上为内部类————————————

    private Node root;   //需要根节点

    public void add(String data){
        Node newNode = new Node(data);
        if(this.root == null){   // 当前没有根节点
            this.root = newNode;    //保存根节点
        }else{    //存在根节点,其他节点交给Node处理
            this.root.addNode(newNode);
        }
    }

}

链表中的方法:

  • public void add(数据类型 变量):普通方法,向链表增加新的数据;
  • public int size():普通方法,取得链表中保存的元素的个数;
  • public boolean isEmpty():普通方法,判断是否是空链表;实际上可以判断root是否有对象,或者保存的数据量是不是0来判断是不是空链表;
  • public boolean contains(数据类型  变量):普通方法,判断某一个数据是否存在;以String为例,查询所保存的内容,用equals()进行比较,如果是false则是空的,如果是true则不为空;
  • public 数据类型 get(int index):普通方法,根据索引取得数据;
  • public void set(int index,数据类型 变量):普通方法,使用新的内容替换指定索引的旧内容;
  • public void remove(数据类型 变量):普通方法,删除指定数据,如果是对象则要进行对象比较;
  • public 数据类型 []toArray():普通方法,将链表以对象数组的方式返回;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值