package List;
import java.util.LinkedList;
public class LinkedListDemo02 {
public static void main(String[] args) {
//linkedList集合继承自List集合,它底层的数据结构是双向链表,ArrayList集合中没有特有方法,它有一些特有方法(鸡肋),这些特有方法是专门操作头尾节点的
//单向链表由一个一个的节点组成。每个节点都有两个区域,指针域和内容域,指针域默认是^,如果下一个元素有内容,则存储下一个元素的地址值;内容域存储的是当前元素的内容
//特点:增删快,查询慢
//因为是无序的列表,所以添加元素直接在内存空间中添加元素,让原集合中的指针域指向添加元素的地址即可,
//删除元素,直接找到对应索引的元素,将被删掉元素中的指针域存储下一个元素的地址值交给它的上一个元素就可以了,也就是让上级元素的指针域指向下级元素的指针域。
//查询慢是因为,他的节点随意存放。查询元素只能从第一个节点开始依次向后寻找,直到找到为止。而数组在空间中的存储是连续的,所以查询比较快
//双向链表有三个区域,前指针域、数据域、后指针域。
//双向链表较单向链表的优点是:它可以从头节点开始查找元素,也可以从尾节点查找,元素距离哪边近就可以从哪边查询,这样就变相的提高了查询能力
//缺点1:删除元素时,单向链表只需要通知上一节点即可,现在需要通知上一节点和下一节点两个元素,所以增删相对于单向链表会慢一些
//缺点2:因为双向链表中每个节点保存的是三个区域,所以会多占用内存
System.out.println("====================特有方法=====================");
//之所以说linkedList集合中的特有方法比较鸡肋,是因为通过继承自List和Collection的方法都可以实现这些功能,当然开发者不是脑瘫,这些方法的运行速度会相对快一些
LinkedList<String> strList = new LinkedList<>();
strList.add("刘玄德");
strList.add("张益德");
strList.add("关云长");
strList.add("曹孟德");
strList.add("孙仲谋");
//获取头结点和尾结点的特有方法
//public E getFirst() : 获取头结点元素
System.out.println("头结点:" + strList.getFirst()); //替代:get(0);
//public E getLast() : 获取尾结点元素
System.out.println("尾结点:" + strList.getLast()); //替换:get(strList.size() - 1);
//新增头结点和尾结点的特有方法
//public void addFirst(E e) : 新增头结点元素
strList.addFirst("诸葛孔明"); //替代:add(0,"诸葛孔明")
//public void addLast(E e) : 新增尾结点元素
strList.addLast("司马懿"); //替换:add("司马懿");
System.out.println("新增头尾节点之后集合的内容是:" + strList);
//删除头结点和尾结点的特有方法
//public E removeFirst() : 删除头结点(返回被删除的元素)
strList.removeFirst(); //替代:remove(0)
//public E removeLast() : 删除尾结点(返回被删除的元素)
strList.removeLast(); //替代:remove(strList.size() - 1)
System.out.println("删除头尾节点之后集合的内容是:" + strList);
//弹出元素第一个元素(弹出:获取并删除)特有方法
String popElement = strList.pop();
System.out.println("弹出的元素是:" + popElement);
System.out.println("弹出元素之后的集合内容是:" + strList);
}
}
LinkedList集合
最新推荐文章于 2022-11-10 14:25:52 发布