LinkedList的总结

 

//单链表LinkedList的原理

class Node

{

       String data; // 存放节点数据本身

       Node next; // 存放指向下一个节点的引用

       public Node(String data)

       {

              this.data = data;

       }

}

public class NodeTest

{

       public static void main(String[] args)

       {

              Node node1 = new Node("node1");

              Node node2 = new Node("node2");

              Node node3 = new Node("node3");

              //链接链表

              node1.next = node2;

              node2.next = node3;

              System.out.println(node1.next.next.data);

              System.out.println("---------------------");

              //在第一和第二中间,插入新链表

              Node node4 = new Node("node4");

              node1.next = node4;

              node4.next = node2;

              System.out.println(node1.next.next.next.data);

              System.out.println("--------------------");

              //删除新链表

              node1.next = node2;

              node4.next = null;

              System.out.println(node1.next.next.data);

                    

       }

}

//双向循环链表LinkedList的原理,还有单向循环链表没有列出来,其实很简单

class Node2

{

       Node2 previous;

       String data;

       Node2 next;

       public Node2(String data)

       {

              this.data = data;

       }

}

public class Node2Test

{    

       public static void main(String[] args)

       {

              Node2 node1 = new Node2("node1");

              Node2 node2 = new Node2("node2");

              Node2 node3 = new Node2("node3");

              //链接链表

              node1.next = node2;

              node2.previous = node1;

              node2.next = node3;

              node3.previous = node2;

              node3.next = node1;

              node1.previous = node3;

              System.out.println("--------------------");

              //插入新链表

              Node2 node4 = new Node2("node4");

              node1.next = node4;

              node4.previous = node1;

              node4.next = node2;

              node2.previous = node4;

              System.out.println("--------------------");

              //删除新链表

              node1.next = node2;

              node2.previous = node1;

              node4.previous = null;

              node4.next = null; 

       }

}

 

//LinkedList链表的使用

import java.util.LinkedList;

public class LinkedListTest1

{    

       public static void main(String[] args)

       {

              LinkedList list = new LinkedList();

              list.add("F");

              list.add("B");

              list.add("D");

              list.add("E");

              list.add("C");

              list.addLast("Z");

              list.addFirst("A");

              list.add(1, "A2");

              System.out.println("最初的集合:" + list);

              list.remove("F");

              list.remove(2);

              System.out.println("变化之后的集合:" + list);

              Object value = list.get(2);

              list.set(2, (String)value + "changed");

              System.out.println("最后的集合:" + list);

       }

}

//用LinedList链表实现队列原理:先进先出

import java.util.LinkedList;

public class MyQueue

{

       private LinkedList list = new LinkedList();

    //插入一个对象

       public void put(Object o)

       {

              list.addLast(o);

       }

    //得到一个对象

       public Object get()

       {

              return list.removeFirst();

       }

    //判断队列是否为空

       public boolean isEmpty()

       {

              return list.isEmpty();

       }

       public static void main(String[] args)

       {

              MyQueue myQueue = new MyQueue();

              myQueue.put("one");

              myQueue.put("two");

              myQueue.put("three");

              System.out.println(myQueue.get());

              System.out.println(myQueue.get());

              System.out.println(myQueue.get());

              System.out.println(myQueue.isEmpty());

       }

 

输出结果:

one

two

three

true

 

LinkedList是Java中的一个类,它实现了List接口和Deque接口,可以被看作是一个顺序容器、队列和栈。LinkedList的遍历过程和查找过程类似,可以从头节点开始往后遍历。然而,LinkedList不擅长随机位置访问,如果使用随机访问遍历LinkedList,效率会很低。通常情况下,我们会使用foreach循环来遍历LinkedList,因为foreach最终会转换成迭代器形式。LinkedList的遍历核心就是它的迭代器实现。[1] LinkedList的继承体系较为复杂,它继承自AbstractSequentialList类,并实现了List和Deque接口。AbstractSequentialList是一个基于顺序访问的接口,通过继承此类,子类只需实现部分代码即可拥有完整的一套访问某种序列表的接口。LinkedList还实现了Deque接口,Deque又继承自Queue接口,因此LinkedList具备了队列的功能。[2][3] LinkedList的实现方式决定了所有与下标有关的操作都是线性时间复杂度,而在首段或末尾删除元素只需要常数时间复杂度。LinkedList没有实现同步(synchronized),如果需要多个线程并发访问,可以使用Collections.synchronizedList()方法对其进行包装。[2] 总结来说,LinkedList是一个灵活的数据结构,可以用作顺序容器、队列和栈。它的遍历过程需要注意效率问题,不适合随机位置访问。LinkedList的继承体系较为复杂,继承自AbstractSequentialList类,并实现了List和Deque接口。LinkedList的实现方式决定了与下标有关的操作是线性时间复杂度,而在首段或末尾删除元素只需要常数时间复杂度。[1][2][3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值