新建网站站点的珠海网站建设策划方案

diannao/2026/1/22 16:34:39/文章来源:
新建网站站点的,珠海网站建设策划方案,百度地图开放平台,如何做网站卖画目录 PriorityQueue详解1、PriorityQueue简介2、PriorityQueue继承体系3、PriorityQueue数据结构PriorityQueue类属性注释完全二叉树、大顶堆、小顶堆的概念☆PriorityQueue是如何利用数组存储小顶堆的#xff1f;☆利用数组存储完全二叉树的好处#xff1f; 4、PriorityQueu… 目录 PriorityQueue详解1、PriorityQueue简介2、PriorityQueue继承体系3、PriorityQueue数据结构PriorityQueue类属性注释完全二叉树、大顶堆、小顶堆的概念☆PriorityQueue是如何利用数组存储小顶堆的☆利用数组存储完全二叉树的好处 4、PriorityQueue的offer方法动画演示offer插入过程 5、PriorityQueue的grow方法6、PriorityQueue的poll方法动画演示poll移除堆顶元素过程 7、PriorityQueue的其remove方法注意点如果remove指定元素 8、PriorityQueue的其他方法element peak补充列表、哈希表、栈、队列、双向队列、阻塞队列基本方法参考 PriorityQueue详解 1、PriorityQueue简介 PriorityQueue 是 Java 集合框架中的一部分位于java.util包下它实现了一个基于优先级的无界队列。 在 PriorityQueue 中队头的元素总是具有最高优先级的元素。这对于需要快速访问最小或最大取决于构造方式元素的场景非常有用。 特点 ①、有序性自动维护队列元素的排序通常是按照自然顺序或提供的比较器进行排序。②、无界PriorityQueue 是无界的意味着它可以动态地扩容。③、性能提供了对头部元素的快速访问插入和删除操作offer、poll的平均时间复杂度为 O(log(n))其中 n 是队列中的元素数量。④、堆实现内部通过一个完全二叉树以数组形式存储即堆[小顶堆或大顶堆]来实现。⑤、非线程安全PriorityQueue 不是线程安全的如果需要在多线程环境中使用应考虑使用 PriorityBlockingQueue。 使用场景 实现优先级调度算法。 维护一个经常变动但需要快速访问最小值的数据集合如事件驱动模拟中的事件队列。 2、PriorityQueue继承体系 public class PriorityQueueE extends AbstractQueueEimplements java.io.Serializable可以看到PriorityQueue就是实现了Queue接口拥有普通队列的一些功能。由于其具有自动优先级排序的功能而比较特殊。 3、PriorityQueue数据结构 PriorityQueue类属性注释 public class PriorityQueueE extends AbstractQueueEimplements java.io.Serializable {private static final int DEFAULT_INITIAL_CAPACITY 11;/*** 用平衡二叉堆表示的优先队列queue[n]的两个子节点是queue[2*n1]和queue[2*(n1)]。* 优先队列按照比较器comparator排序如果比较器为空则按元素的自然顺序排序* 对于堆中的每个节点n及其每个后代d都有n d。假设队列非空值最小的元素在queue[0]中。*/transient Object[] queue;/*** 优先队列中的元素数量。*/private int size 0;/*** 比较器如果优先队列使用元素的自然顺序则为空。*/private final Comparator? super E comparator;} 注意点 我们主要来看下面这段注释 /*** 用小顶堆表示的优先队列queue[n]的两个子节点是queue[2*n1]和queue[2*(n1)]。* 优先队列按照比较器comparator排序如果比较器为空则按元素的自然顺序排序* 对于堆中的每个节点n及其每个后代d都有n d。假设队列非空值最小的元素在queue[0]中。*/transient Object[] queue;PriorityQueue本质上还是使用Object[]数组来存储元素,只不过其存储的位置符合小顶堆的结构。 完全二叉树、大顶堆、小顶堆的概念 完全二叉树Complete Binary Tree 是指所有层都被完全填满的二叉树除了最后一层节点可以不完全填满但节点必须从左到右排列。 完全二叉树示例 1/ \2 3/ \4 5 大顶堆Max Heap 大顶堆是一种特殊的完全二叉树其中每个节点的值都大于或等于其子节点的值。 也就是说根节点是所有节点中最大的。 大顶堆示例 10/ \9 8/ \ / \7 6 5 4 小顶堆Min Heap: 小顶堆也是一种特殊的完全二叉树其中每个节点的值都小于或等于其子节点的值。 也就是说根节点是所有节点中最小的。 小顶堆示例 1/ \2 3/ \ / \4 5 6 7 总结 完全二叉树强调树的形态所有节点从左到右依次填满。 大顶堆和小顶堆不仅是完全二叉树还在此基础上增加了节点值的排序要求确保堆顶元素是最大值大顶堆或最小值小顶堆。 ☆PriorityQueue是如何利用数组存储小顶堆的 以下面的小顶堆为例转为数组存储 1/ \2 3/ \ / \4 5 6 7 我们知道像HashMap存储红黑树都是使用的TreeNodeK,V对象这个对象里面有 parent、left、right指针来指向当前树节点的父节点、左右子节点。 我们如果想用数组来存储树节点的元素就必须能够根据其中一个节点得到其父节点和左右子节点。 那么直接按照层序遍历存储把上面的小顶堆转为数组 [1,2,3,4,5,6,7] 如何根据其中一个节点就能够得到其父节点和左右子节点呢 答案是 对于完全二叉树而言(上面说了小顶堆是特殊的完全二叉树) 按照层序遍历顺序存储在数组中的元素索引位置是有固定规律的。 我们看下 元素1的索引是0左子结点元素是2、对应索引位置是1,右子结点元素是3、对应索引位置是2。 123这三个元素的索引位置 为 0 1 2 我们再看下 元素2的索引是1左子结点元素是4、对应索引位置是3, 右子结点元素是5、对应索引位置是4。 245这三个元素的索引位置 为 1 3 4 我们列出上面的位置信息 当前节点索引位置左子节点索引位置右子节点索引位置012134 如果还看不出来规律没关系我们再找一个元素3的索引是2左子结点元素是6、对应索引位置是5, 右子结点元素是7、对应索引位置是6。 367这三个元素的索引位置 为 2 5 6 这个时候再列出位置信息 当前节点索引位置左子节点索引位置右子节点索引位置012134256 是不是就很容易得出规律了 假设某个元素的索引位置是i 那么: 该元素左节点索引位置 2*i1 该元素右节点索引位置 2*i2 我们再反推,对于 该元素左节点来说该元素就是其左子节点元素的父节点 由左子节点元素索引位置反推父节点元素索引位置 父节点元素索引位置(i-1)/2 由右子节点元素索引位置反推父节点元素索引位置 父节点元素索引位置 (i-2)/2 如何把父节点元素索引位置的反推结果统一呢 直接取 父节点元素索引位置(i-1)/2即可因为一个有效的索引位置应该是大于等于0的正整数对于计算父节点元素索引位置来说 i 是大于0的因为索引位置0是根节点根节点没有父节点。 因此在i0且取正整数的情况下 (i-1)/2 与 (i-2)/2 得到的结果是一致的。因为Java中整数类型的运算会丢弃小数部分。 比如(1-1)/2 和 (1-2)/2 都等于0,这正好说明索引位置1和索引位置2的元素的父节点索引位置是0,也就是根节点。 这个时候再看上面 对于属性 transient Object[] queue;的注释就能看懂了。 数组中第一个元素存放的是小顶堆的根节点也就是最小的元素对于任意索引位置 i 的元素其左子结点的索引为2*i1,其右子结点的索引为2*i2, 父节点的索引为(i-1)/2。 这个时候我们知道一个元素的位置就能推导出其父节点和左右子节点的位置所以就能够用数组来存储二叉堆结构的树节点了。 这里再补充一个知识点因为上面一会儿 二叉树完全二叉树二叉堆大顶堆小顶堆别干懵了。 二叉树: 是一种通用的数据结构用于表示具有层级关系的数据。 完全二叉树: 是二叉树的一种特殊形式除了最后一层外所有层都是满的最后一层的节点尽可能靠左。 二叉堆: 是基于完全二叉树的堆数据结构分为大顶堆和小顶堆用于实现优先队列和堆排序等。 ☆利用数组存储完全二叉树的好处 上面其实就是计算按照层序遍历的顺序存储的完全二叉树的数组其树节点的位置在数组中的关系。 好处还是比较多的 ①、空间利用高效 由于完全二叉树的节点是紧凑排列的除了最后一层外每一层都是满的因此可以高效地利用数组空间没有空洞。相对于指针实现如链表数组存储方式节省了存储指针的额外空间。 ②、索引计算简单 在完全二叉树中通过数组存储父节点和子节点的关系可以通过简单的算术运算来确定 左子节点索引2i 1 右子节点索引2i 2 父节点索引(i - 1) / 2 ③、随机访问高效 数组允许通过索引进行O(1)时间复杂度的随机访问。这比链表结构要快得多在需要频繁访问节点的场景下特别有用。 ④、内存局部性好 数组在内存中是连续存储的利用了缓存的局部性原理cache locality因此在遍历或访问树的过程中可以提高内存访问速度。 ⑤、堆操作实现简洁 利用数组存储完全二叉树简化了很多操作的实现比如堆操作插入、删除、调整的实现都变得相对简洁。像堆排序、优先队列PriorityQueue等数据结构都能高效地利用数组存储完全二叉树。 ⑥、避免复杂指针操作 数组存储方式避免了复杂的指针操作减少了指针操作带来的潜在错误风险如空指针等问题代码更为简洁和安全。 4、PriorityQueue的offer方法 上面了解了PriorityQueue的数据存储结构之后再详细看下具体的代码实现。 public boolean offer(E e) {// 如果插入的元素为空抛出空指针异常if (e null)throw new NullPointerException();// 更新修改计数用于并发控制modCount;// 当前队列的大小int i size;// 如果当前大小已经达到数组的容量需要扩容if (i queue.length)grow(i 1);// 增加队列的大小size i 1;// 如果这是插入的第一个元素直接放在队列的第一个位置if (i 0)queue[0] e;else// 否则需要进行上浮操作以维持堆的性质siftUp(i, e);return true;}private void siftUp(int k, E x) {// 如果有比较器使用比较器进行上浮if (comparator ! null)siftUpUsingComparator(k, x);else// 否则使用元素自身的比较方法进行上浮siftUpComparable(k, x);}private void siftUpUsingComparator(int k, E x) {while (k 0) {// 找到父节点的位置 无符号右移一位 相当于 (k-1)/2 就是上面我们说的父节点位置int parent (k - 1) 1;// 获取父节点的元素Object e queue[parent];// 如果插入的元素大于等于父节点的元素停止上浮if (comparator.compare(x, (E) e) 0)break;// 否则将父节点的元素下移到当前位置queue[k] e;// 更新当前位置为父节点的位置继续上浮k parent;}// 将插入的元素放到最终位置queue[k] x;}private void siftUpComparable(int k, E x) {// 将插入元素强制转换为Comparable类型Comparable? super E key (Comparable? super E) x;while (k 0) {// 找到父节点的位置int parent (k - 1) 1;// 获取父节点的元素Object e queue[parent];// 如果插入的元素大于等于父节点的元素停止上浮if (key.compareTo((E) e) 0)break;// 否则将父节点的元素下移到当前位置queue[k] e;// 更新当前位置为父节点的位置继续上浮k parent;}// 将插入的元素放到最终位置queue[k] key;} 总结下 offer(E e) 方法 检查空元素如果插入的元素为 null抛出 NullPointerException。 记录修改增加修改计数 modCount用于并发控制。 检查并扩容如果当前数组容量不足调用 grow 方法进行扩容。 增加大小增加 size 变量。 插入第一个元素如果这是队列中的第一个元素直接插入到数组的第一个位置。 堆上浮如果不是第一个元素调用 siftUp 方法进行堆的上浮操作以维持堆的性质。 siftUp(int k, E x) 方法 选择上浮方法如果有比较器 comparator则使用 siftUpUsingComparator 方法否则使用 siftUpComparable 方法。 siftUpUsingComparator(int k, E x) 方法 使用提供的比较器 comparator 进行元素的比较和上浮操作。 上浮逻辑与父节点比较如果插入的元素小于父节点则将父节点下移继续上浮。 siftUpComparable(int k, E x) 方法 强制类型转换将插入的元素强制转换为 Comparable 类型。 上浮逻辑与父节点比较如果插入的元素小于父节点则将父节点下移继续上浮。 动画演示offer插入过程 public static void main(String[] args) {PriorityQueueInteger priorityQueue new PriorityQueue();priorityQueue.offer(6);priorityQueue.offer(1);priorityQueue.offer(7);priorityQueue.offer(4);priorityQueue.offer(5);priorityQueue.offer(2);priorityQueue.offer(3);}由于第一个元素直接是插入数组第一个位置所以第一个元素就直接插入了。 动画太长了这里分段演示了 。 继续演示剩下的3个元素。 注意动画中绿色文字计算部分对应下图源码绿框内比较逻辑 我们添加元素的顺序是 6174523 最终转为小顶堆存储的数组顺序是 可以看到是符合小顶堆的定义的 每个节点的值都小于或等于其子节点的值。 最后再利用反射获取 Object[] queue; 来验证下画的offer过程对不对 import java.lang.reflect.Field; import java.util.Arrays; import java.util.PriorityQueue;public class TestA {public static void main(String[] args) throws Exception {PriorityQueueInteger priorityQueue new PriorityQueue();priorityQueue.offer(6);priorityQueue.offer(1);priorityQueue.offer(7);priorityQueue.offer(4);priorityQueue.offer(5);priorityQueue.offer(2);priorityQueue.offer(3);Class? extends PriorityQueue aClass priorityQueue.getClass();Field queue aClass.getDeclaredField(queue);queue.setAccessible(true);Object[] integers (Object[]) queue.get(priorityQueue);System.out.println(Arrays.toString(integers));} } 运行结果 可以看到和上面动画演示结果一致 [1, 4, 2, 6, 5, 7, 3, null, null, null, null] 5、PriorityQueue的grow方法 又要见到老朋友了Arrays.copyOf private void grow(int minCapacity) {// 获取当前队列的容量int oldCapacity queue.length;// 如果当前容量小于64则将容量增加一倍再2否则增加约50%的容量int newCapacity oldCapacity ((oldCapacity 64) ?(oldCapacity 2) :(oldCapacity 1));// 防止容量溢出如果新容量超过最大数组大小则调用hugeCapacity方法if (newCapacity - MAX_ARRAY_SIZE 0)newCapacity hugeCapacity(minCapacity);// 使用Arrays.copyOf将数组扩容到新容量queue Arrays.copyOf(queue, newCapacity);} 总结下 如果使用空参构造初始化的是一个容量为11的数组当添加第十二个元素的时候开始扩容由于当前容量是11 64 , 那么扩容到 11 11 2 24。 可以使用代码验证下 import java.lang.reflect.Field; import java.util.Arrays; import java.util.PriorityQueue;public class TestA {public static void main(String[] args) throws Exception {PriorityQueueInteger priorityQueue new PriorityQueue();priorityQueue.offer(1);priorityQueue.offer(2);priorityQueue.offer(3);priorityQueue.offer(4);priorityQueue.offer(5);priorityQueue.offer(6);priorityQueue.offer(7);priorityQueue.offer(8);priorityQueue.offer(9);priorityQueue.offer(10);priorityQueue.offer(11);priorityQueue.offer(12);Class? extends PriorityQueue aClass priorityQueue.getClass();Field queue aClass.getDeclaredField(queue);queue.setAccessible(true);Object[] integers (Object[]) queue.get(priorityQueue);System.out.println(Arrays.toString(integers));System.out.println(integers.length);} }运行结果 和我们上面根据代码分析得出的结果是一致的 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, null, null, null, null, null, null, null, null, null, null, null, null] 246、PriorityQueue的poll方法 poll方法用于移除并返回优先队列的头部元素即优先级最高的元素。如果队列为空则返回 null。 public E poll() {if (size 0)return null; // 如果队列为空返回 nullint s --size; // 减少队列的大小modCount; // 更新操作计数用于快速失败机制E result (E) queue[0]; // 获取队列头部元素优先级最高的元素E x (E) queue[s]; // 获取队列最后一个元素queue[s] null; // 将队列最后一个位置置为 null便于垃圾回收if (s ! 0)siftDown(0, x); // 如果队列不为空将最后一个元素下沉到合适的位置return result; // 返回优先级最高的元素 } private void siftDown(int k, E x) {if (comparator ! null)siftDownUsingComparator(k, x); // 如果有比较器使用自定义比较器进行下沉elsesiftDownComparable(k, x); // 否则使用元素的自然顺序进行下沉 } private void siftDownComparable(int k, E x) {Comparable? super E key (Comparable? super E) x; // 将元素转换为 Comparableint half size 1; // 计算非叶子节点的数量所有有子节点的节点while (k half) { // 循环处理直到 k 位置是叶子节点int child (k 1) 1; // 获取左子节点位置Object c queue[child]; // 假设左子节点为较小的子节点int right child 1; // 获取右子节点位置if (right size ((Comparable? super E) c).compareTo((E) queue[right]) 0)c queue[child right]; // 如果右子节点存在且小于左子节点则选择右子节点if (key.compareTo((E) c) 0)break; // 如果 x 已经小于等于子节点则结束queue[k] c; // 否则将较小的子节点提升到 k 位置k child; // 更新 k 为子节点的位置继续下沉}queue[k] key; // 将 x 放置在合适的位置 } private void siftDownUsingComparator(int k, E x) {int half size 1; // 计算非叶子节点的数量所有有子节点的节点while (k half) { // 循环处理直到 k 位置是叶子节点int child (k 1) 1; // 获取左子节点位置 相当于 2*k 1Object c queue[child]; // 假设左子节点为较小的子节点int right child 1; // 获取右子节点位置 或者 2*k 2 if (right size comparator.compare((E) c, (E) queue[right]) 0)c queue[child right]; // 如果右子节点存在且小于左子节点则选择右子节点if (comparator.compare(x, (E) c) 0)break; // 如果 x 已经小于等于子节点则结束queue[k] c; // 否则将较小的子节点提升到 k 位置k child; // 更新 k 为子节点的位置继续下沉}queue[k] x; // 将 x 放置在合适的位置 } 总结下 poll 方法通过以下步骤实现优先队列的出队操作 检查队列是否为空若为空返回 null。 获取并移除队列的最后一个元素。 将优先队列的头部元素与最后一个元素进行交换。 通过 siftDown 方法将交换后的元素下沉到合适的位置直到维持了小顶堆的性质。 返回原来的头部元素即优先级最高的元素。 动画演示poll移除堆顶元素过程 源码中可以看出获取堆顶元素非常简单 E result (E) queue[0]; // 获取队列头部元素优先级最高的元素 下面主要分析堆顶元素被移除后如何重组堆让其维持小顶堆的特性。 这里还需要再介绍一个完全二叉树的性质 上面对于完全二叉树节点索引的性质已经介绍过了这里不再赘述。 完全二叉树其他的性质 在完全二叉树中如果节点总数为 n则最后一个非叶子节点的索引为 n/2 - 1。 叶子节点索引从 n/2 到 n-1。 非叶子节点的数量是 n/ 2。 (siftDown方法就利用到了这个性质) 这里需要明确的是 siftDown方法本质上就是把堆顶上的大元素下沉到堆底循环这个过程直到堆符合小顶堆的性质。 poll方法代码示例 import java.lang.reflect.Field; import java.util.Arrays; import java.util.Hashtable; import java.util.PriorityQueue; import java.util.concurrent.ConcurrentHashMap;public class TestA {public static void main(String[] args) throws Exception {PriorityQueueInteger priorityQueue new PriorityQueue();priorityQueue.offer(6);priorityQueue.offer(1);priorityQueue.offer(7);priorityQueue.offer(4);priorityQueue.offer(5);priorityQueue.offer(2);priorityQueue.offer(3);Class? extends PriorityQueue aClass priorityQueue.getClass();Field queue aClass.getDeclaredField(queue);queue.setAccessible(true);Object[] integers (Object[]) queue.get(priorityQueue);System.out.println(Arrays.toString(integers));System.out.println(priorityQueue.poll());System.out.println(Arrays.toString(integers));} }运行结果 [1, 4, 2, 6, 5, 7, 3, null, null, null, null] 1 [2, 4, 3, 6, 5, 7, null, null, null, null, null]我觉得这个poll移除元素 重组堆的过程理解起来没那么难就是动画不好画 还是建议断点看看源码更好下面动画只是很简略的画了一下 。 可以看到和上面运行结果一致 最终移除堆顶元素后的数组 [2, 4, 3, 6, 5, 7, null, null, null, null, null] 7、PriorityQueue的其remove方法 这个方法用于移除并返回堆顶元素。如果堆是空的则抛出 NoSuchElementException。 public E remove() {E x poll(); // 调用 poll 方法获取并移除堆顶元素if (x ! null) // 如果堆顶元素不为 nullreturn x; // 返回堆顶元素elsethrow new NoSuchElementException(); // 如果堆为空抛出 NoSuchElementException }带参数的 remove 方法移除指定的元素 o。如果找到该元素则移除并返回 true否则返回 false。 public boolean remove(Object o) {int i indexOf(o); // 查找元素 o 在堆中的索引if (i -1) // 如果索引为 -1表示堆中不存在该元素return false; // 返回 falseelse {removeAt(i); // 在位置 i 处移除该元素return true; // 返回 true表示成功移除元素} }在指定索引 i 处移除元素的方法 private E removeAt(int i) {modCount; // 增加修改计数器表示堆结构发生了变化int s --size; // 减少堆的大小if (s i) // 如果移除的是最后一个元素queue[i] null; // 直接将该位置置为 nullelse {E moved (E) queue[s]; // 获取堆中的最后一个元素queue[s] null; // 将最后一个位置置为 nullsiftDown(i, moved); // 尝试将 moved 元素下沉到合适的位置if (queue[i] moved) { // 如果 moved 元素没有下沉siftUp(i, moved); // 尝试将 moved 元素上浮到合适的位置if (queue[i] ! moved) // 如果 moved 元素被替换了return moved; // 返回 moved 元素表示它被替换}}return null; // 返回 null表示没有元素被替换 }注意点如果remove指定元素 移除的是非最后一个元素这种情况下 实际上可以类比上面的poll方法poll是移除堆顶元素。然后从堆顶元素开始往下循环处理堆重组。 移除指定的元素 obj那就从obj元素开始往下循环处理堆重组。 处理堆重组使用的都是siftDown方法。 8、PriorityQueue的其他方法element peak element()方法用于获取但不移除堆顶元素。如果堆为空则抛出 NoSuchElementException。 public E element() {E x peek();if (x ! null)return x;elsethrow new NoSuchElementException();}peek()方法用于获取但不移除堆顶元素。如果堆为空则返回 null。 public E peek() {return (size 0) ? null : (E) queue[0];}补充 列表、哈希表、栈、队列、双向队列、阻塞队列基本方法参考 为了防止混乱这里对表、哈希表、栈、队列、双向队列、阻塞队列的一些常用基本方法列出以供参考 CollectionMethodDescriptionThrows ExceptionListadd(E e)添加元素到列表末尾返回 true无add(int index, E element)在指定位置插入元素IndexOutOfBoundsExceptionget(int index)获取指定位置的元素IndexOutOfBoundsExceptionremove(int index)移除指定位置的元素IndexOutOfBoundsExceptionset(int index, E element)替换指定位置的元素IndexOutOfBoundsExceptioncontains(Object o)判断列表是否包含指定元素无Mapput(K key, V value)插入键值对返回之前关联的值无get(Object key)获取指定键的值无remove(Object key)移除指定键的键值对无containsKey(Object key)判断是否包含指定键无containsValue(Object value)判断是否包含指定值无Stackpush(E item)压入元素到栈顶无pop()移除并返回栈顶元素EmptyStackExceptionpeek()返回栈顶元素但不移除EmptyStackExceptionQueueadd(E e)添加元素到队列末尾若队列已满抛异常IllegalStateExceptionoffer(E e)添加元素到队列末尾返回 true 或 false无remove()移除并返回队列头部元素NoSuchElementExceptionpoll()移除并返回队列头部元素若队列为空返回 null无element()返回队列头部元素但不移除NoSuchElementExceptionpeek()返回队列头部元素但不移除若队列为空返回 null无DequeaddFirst(E e)添加元素到双端队列的开头无addLast(E e)添加元素到双端队列的末尾无offerFirst(E e)添加元素到双端队列的开头返回 true 或 false无offerLast(E e)添加元素到双端队列的末尾返回 true 或 false无removeFirst()移除并返回双端队列的开头元素NoSuchElementExceptionremoveLast()移除并返回双端队列的末尾元素NoSuchElementExceptionpollFirst()移除并返回双端队列的开头元素若为空返回 null无pollLast()移除并返回双端队列的末尾元素若为空返回 null无getFirst()返回双端队列的开头元素但不移除NoSuchElementExceptiongetLast()返回双端队列的末尾元素但不移除NoSuchElementExceptionpeekFirst()返回双端队列的开头元素但不移除若为空返回 null无peekLast()返回双端队列的末尾元素但不移除若为空返回 null无BlockingQueueadd(E e)添加元素到队列末尾若队列已满抛异常IllegalStateExceptionoffer(E e)尝试添加元素到队列末尾返回 true 或 false无offer(E e, long timeout, TimeUnit unit)尝试添加元素到队列末尾在超时时间内等待InterruptedExceptionput(E e)添加元素到队列末尾若队列已满则等待InterruptedExceptiontake()移除并返回队列头部元素若队列为空则等待InterruptedExceptionpoll(long timeout, TimeUnit unit)移除并返回队列头部元素在超时时间内等待InterruptedExceptionremainingCapacity()返回队列剩余的容量无drainTo(Collection? super E c)移除所有可用元素到指定集合无drainTo(Collection? super E c, int maxElements)移除最多指定数量的可用元素到指定集合无clear()移除所有元素无

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阳泉建设局网站网站换了域名还被k站不

鼠标交互(没有强调场景的变换) 鼠标命中测试(HitTest 不推荐) 平面对象加载 数据绑定(数据与动作) 环境配置与相关方法 模型准备:Blender/SolidWorks 模型导入 HelixToolkit更多案例…

济宁软件开发网站建设夫唯seo教程

导读:NumPy以其强大的多维数组对象和广泛的数学函数库著称。这些特性使得NumPy成为不仅在学术研究,也在工业界广泛应用的工具。无论是机器学习算法的开发、数据分析、还是复杂的数学模型的构建,NumPy都扮演着举足轻重的角色。 目录 Numpy简…

asp服装网站源码网站外链数怎么查

题意:当时还挺绕人,讲的就是一个走廊里有n个灯,一个人(疯了)来回在走廊里转,走第i 圈的时候将灯数能够整除i的灯号改变一下开关,问最后的时候(走n圈的)最后一个灯是明还是…

门户网站建设如何入账wordpress主题怎么删除

文章目录使用 Remote Desktop Connection for mac 客户端第 1 步:Windows 电脑进行远程设置第 2 步:Windows 电脑设置管理员账号和密码第 3 步:获取 Windows 电脑的 IP 地址第 4 步:Mac 电脑安装远程桌面连接客户端第 5 步&#x…

英文网站注意事项网站建设与app开发

PAGEPAGE 1第四章存储系统(二)测试书生1、32位处理器的最大虚拟地址空间为????A、2G????B、4G????C、8G????D、16G2、在虚存、内存之间进行地址变换时,功能部件 ( )将地址从虚拟(逻辑)地址空间映射到物理地址空间????A、TLB????B、MMU???…

典型的电子商务网站有哪些wordpress加速优化

转载自 【开源组件】一份值得收藏的的 MySQL 规范 数据命名规范 所有数据库对象名称必须使用小写字母并用下划线分割。 所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)。 数据库对象的…

wordpress线上聊天插件宁波关键词在线优化

下载: 链接:百度网盘 请输入提取码 提取码:f4as 简介 2019某CTF线下赛真题内网结合WEB攻防题库,涉 及WEB攻击,内网代理路由等技术,每台服务器存在一个 Flag,获取每一 个Flag对应一个积分&…

试玩平台类网站怎么做的紫色风格网站

前言 帮别人敲了个Demo,抱试一试心态,居然成功了,可以用。给小伙伴们看看效果。 遇到问题 1,input输入value失败,里面要套了个事件,再变换输入value。后来用浏览器开发工具,研究js代码,太难了&a…

苏州 手机网站徐州高端网站建设

一、引言 随着网络技术的飞速发展,网络安全问题日益凸显,其中勒索病毒作为一种极具破坏性的网络攻击手段,已在全球范围内造成了巨大的经济损失和社会影响。在众多勒索病毒中,.hmallox勒索病毒以其狡猾的传播方式和强大的加密能力…

如何做充值网站国内时事新闻2023最新

最近连着几天晚上在家总是接到一些奇奇怪怪的电话,“哥,你是 xxx 吧,我们这里是 xxx 高端男士私人会所...”,握草,我先是一愣,然后狠狠的骂了回去。一脸傲娇的转过头,面带微笑稍显谄媚&#xff…

河南优化网站山东高级网站建设

一、引言: 机器学习是人工智能的分支之一,旨在研究如何使计算机系统自主地从数据中学习,并能够根据以往的经验做出预测或决策。现代机器学习主要使用统计学、概率论和优化算法来构建模型和训练算法。 应用场景: 机器学习在众多领…

对单位网站建设的意见html素材免费下载

“云计算” 算是近年来最热的词了。现在 IT 行业见面不说这三个字您都不好意思跟人家打招呼。 对于云计算,学术界有各种定义,大家有兴趣可以百度一下。 CloudMan 这里主要想从技术的角度谈谈对云计算的理解。 基本概念 所有的新事物都不是突然冒出来的&a…

网站有收录但是没排名武威网站怎么做seo

1. 在SpringBoot项目中如何实现数据库连接的连接池管理? 在Spring Boot项目中,数据库连接的连接池管理通常通过配置和自动配置功能来实现。Spring Boot默认使用HikariCP作为连接池,但也可以配置为使用其他连接池,如Tomcat JDBC Pool或C3P0。…

杭州做公司网站1+x网店运营推广

⭕️前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(点击跳转到网站)⭕️ MySQL针对日期的处理 日期函数 SELECT CURDATE() -- 输出当前日期:2000-01-01 SELECT CURTIME() -- 输出当前时间&a…

烟台做网站推广的公司哪家好重庆妇科排名前十的医院

XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。 XML 把数据从 HTML 分离 如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。 通过 XML,数据能够存储在独立的 XML 文件中。这样你就可以…

运营网站要多少费用长沙制作网站软件

一、Vant 官方地址:https://youzan.github.io/vant/#/zh-CN/ 简介:有赞公司开发。 特性:60 高质量组件、90% 单元测试覆盖率、完善的中英文文档和示例、支持按需引入、支持主题定制、支持国际化、支持 TS、支持 SSR。 特别说明&#xff1…

开鲁网站seo免费版上海网站建设建站

简单安装好Qt和编译安装好opencv后,简单实现第一个Qtopencv程序:读取并显示一张图片,这里我的Qt版本时5.9.1,opencv版本是4.0.1,版本的影响不大。 首先我们用Qt创建一个控制台项目,即在创建项目时选择Qt C…

做微电网的公司网站网站外部链接建设分析

(一)概述异常处理是一个系统最重要的环节,当一个项目变得很大的时候,异常处理和日志系统能让你快速定位到问题。对于用户或者接口调用者而言,优雅的异常处理可以让调用者快速知道问题所在。本文将介绍如何优雅地处理异常。(二)使用通用的返回…

asp.net网站发布到虚拟主机网站备案中打不开

:::details 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1…

企业英语网站京东电子商务网站建设

41. lldb(gdb)常用的控制台调试命令?1). p 输出基本类型。是打印命令,需要指定类型。是print的简写 p (int)[[[self view] subviews] count] 2). po 打印对象,会调用对象description方法。是print-object的简写 po [self view] 3). expr 可以在调试时动态执行指定表达式,…