做ic比较有名的网站,网站首页制作公司,长春建设平台网站的公司,网站收录怎么做#xff08;2#xff09; ArrayList和LinkedList的区别 1、ArrayList和LinkedList都实现了List接口2、ArrayList和LinkedList都是非线程安全的#xff0c;因此在多线程环境下可能会出现出现不同步的情况3、ArrayList底层实现是数组#xff0c;LinkedList底层实现是双向链表…2 ArrayList和LinkedList的区别 1、ArrayList和LinkedList都实现了List接口2、ArrayList和LinkedList都是非线程安全的因此在多线程环境下可能会出现出现不同步的情况3、ArrayList底层实现是数组LinkedList底层实现是双向链表4、ArrayList因为底层实现是数组并且支持随机访问因此查找效率高但是ArrayList在新增元素时会扩容以及复制数组元素并且删除时也会进行数组复制所以增删效率低。而LinkedList不支持随机访问获取元素时必须从首节点开始从前往后遍历查找因此查找效率低。但是增加和删除时最多涉及到两个节点的操作因此增删效率高。
3 Queue Queue 队列通常是指先进先出FIFO的容器。队列的头部保存在队列中存放时间最长的元素队列的尾部保存在队列中存放时间最短的元素。新元素插入offer到队列的尾部访问元素poll操作会返回队列头部的元素。boolean add(Object e)∶将指定元素加入此队列的尾部。Object element()∶获取队列头部的元素但是不删除该元素。boolean offer(Object e)∶将指定元素加入此队列的尾部。当使用有容量限制的队列时此方法通常比 add(Object e)方法更好。Object peek()∶获取队列头部的元素但是不删除该元素。如果此队列为空则返回 null。Object poll()∶获取队列头部的元素并删除该元素。如果此队列为空则返回 null。Object remove()∶获取队列头部的元素并删除该元素。
public class QueueDemo { public static void main(String[] args) { QueueString queue new LinkedList(); //添加元素 queue.offer(111); queue.offer(222); queue.offer(333); queue.offer(444); //添加失败时会抛出异常 queue.add(555); //删除失败时会抛出异常 queue.remove(555); for(String q:queue){ System.out.println(q); } System.out.println(-----------); //返回第一个元素并在列表中删除 queue.poll(); for(String q:queue){ System.out.println(q); } System.out.println(-----------); //返回第一个元素 System.out.println(queue.element()); System.out.println(-----------); //返回第一个元素 System.out.println(queue.peek()); System.out.println(-----------); } }
PriorityQueue实现类 PriorityQueue是一个标准的队列实现需要注意的是PriorityQueue并不是绝对标准的队列实现这是因为PriorityQueue保存队列元素的顺序并不是按照加入的顺序在PriorityQueue内部会对元素的大小进行重新排序。 因此当调用peek()方法或者poll()方法取出队列中的元素时。并不是取出最先进入队列的元素而是取出队列中最小的元素从这个意义上来看PriorityQueue已经违反了队列先进先出的规则。
3、学习心得
今天主要学习了LinkedList源码简单实现了底层的基础源码对其底层数据结构、构造方法以及增删改查的部分方法进行了理解和分析。折服于Java源代码设计的高超通过查看源代码的同时也培养了自己的编程思路。同时还学习了ArrayList和LinkedList的区别、Quene接口的相关内容。