-
单向链表中的节点是链表的基本单元,每个节点都有两个属性:1、存储的数据 2、下一个节点的地址
-
链表优点:随机增删元素效率较高,因为增删元素不涉及大量元素的位移
-
链表缺点:查询效率低,每一次查找某个元素的时候都要从头节点往下遍历
-
以demo为例解释什么是链表
- 首先我们定义一个链表类,其中包含添加、删除、修改、查找等方法。并且定义了头节点header属性和size属性
package collection;
public class Link {
//头节点
Node header = null;
int size = 0;
public int size(){
return size;
}
//向链表中添加元素的方法
public void add(Object data){
//创建一个新的节点对象
//让之前单链表的莫为节点的next指向新节点对象
if (header == null){
//说明还没有节点
//创建一个头节点
header = new Node(data,null);
}else{
//说明已经有节点了,就找到末尾节点,在其后添加元素
Node currentLastNode = findLast(header);
currentLastNode.next = new Node(data,null);
}
size ++;
}
/**
* 专门查找末尾节点的方法
* @param node
* @return
*/
private Node findLast(Node node) {
if (node.next == null){
return node;
}
return findLast(node.next);
}
//向链表中删除元素的方法
public void remove(Object obj){
}
//向链表中修改元素的方法
public void modify(Object obj){
}
//在链表中查找元素的方法
public void find(Object obj){
}
}
- 我们需要定义Node类用来定义节点信息,其中包含有参构造和无参构造,并且有两个重要属性:数据内容和下一个节点的地址
package collection;
public class Node {
//存储的数据
Object element;
//下一个节点的内存
Node next;
//无参构造
public Node(){
}
//有参构造
public Node(Object element, Node next){
this.element = element;
this.next = next;
}
}
- 写一个test类进行简单的测试
package collection;
public class LinkTest {
public static void main(String[] args) {
Link link = new Link();
link.add(1);
link.add(2);
link.add(3);
link.add(4);
link.add(5);
System.out.println(link.size);//5
}
}