数组是连续的,而链表不是,链表是由值和地址指针组成的,如下图:
在电脑上内存一般是用数组存储的,数组索引较快。而磁盘是用链表存储的,那为什么数组索引快还在磁盘上用链式存储这种查找速度慢的,这是因为文件都存在磁盘上,如果删除文件后就会造成磁盘扇区碎片化,用链表存储可以合理运用碎片化的空间。磁盘存储如下图:
这样大大提高了磁盘的利用率。
java文件编译成class文件是放入电脑内存中的,因为内存是用数组存储的,所以如果想用java实现链表存储我们需要写几个方法来让java完成链表
分别定义了Node、Linklist、Test三个类,看如下代码:
Node代码:
public class Node {
//定义链表的value,存放值
public int node;
//定义链表的指针,让它来指向下一个值的地址,使用Node类型就是因为值传递中要传递的是Node类型的数据
Node next;
//用构造器把值来存到堆中
public Node(int node) {
this.node=node;
}
}
Linklist代码:
//链表的管理类
public class Linklist {
//把链表放入堆中,方便管理
Node head=null;
public Linklist() {
// TODO Auto-generated constructor stub
}
public void add(int n) {
Node node=new Node(n);
//定义头指针来判断是否有元素
if(head==null) {
head=node;
return;
}
//定义游标tempNode,让它们指针连接起来
Node tempNode=head;
//如果游标的next不是null,让它遍历一遍,让游标指向倒数第二个元素
while (tempNode.next!=null) {
tempNode=tempNode.next;
}
//如果游标的next是null,让它的下一个指最新数据
tempNode.next=node;
}
public void printLink() {
Node temp=head;
while (temp!=null) {
System.out.println(temp.node);
temp=temp.next;
}
}
}
Test代码:
public class Test {
public static void main(String[] args) {
Linklist linklist=new Linklist();
linklist.add(3);
linklist.add(5);
linklist.add(2);
linklist.add(9);
linklist.add(0);
linklist.printLink();
}
}
输出结果: