做网站是如何赚钱的wordpress用户数据表
news/
2025/9/23 16:31:34/
文章来源:
做网站是如何赚钱的,wordpress用户数据表,上海建筑工程招投标网,wordpress 3d标签云 插件最近在整理数据结构方面的知识, 系统化看了下 Java 中常用数据结构, 突发奇想用动画来绘制数据流转过程.主要基于 jdk8, 可能会有些特性与 jdk7 之前不相同, 例如 LinkedList LinkedHashMap 中的双向列表不再是回环的.HashMap 中的单链表是尾插, 而不是头插入等等, 后文不再赘叙…最近在整理数据结构方面的知识, 系统化看了下 Java 中常用数据结构, 突发奇想用动画来绘制数据流转过程.主要基于 jdk8, 可能会有些特性与 jdk7 之前不相同, 例如 LinkedList LinkedHashMap 中的双向列表不再是回环的.HashMap 中的单链表是尾插, 而不是头插入等等, 后文不再赘叙这些差异, 本文目录结构如下:LinkedList经典的双链表结构, 适用于乱序插入, 删除. 指定序列操作则性能不如 ArrayList, 这也是其数据结构决定的.add(E) / addLast(E)add(index, E)这边有个小的优化, 他会先判断 index 是靠近队头还是队尾, 来确定从哪个方向遍历链入.if(index1))Node x first;for (inti 0; i index; i) {x x.next;}return x;}else{Node x last;for (int i size - 1; i index; i--) {x x.prev;}return x;}靠队尾get(index)也是会先判断 index, 不过性能依然不好, 这也是为什么不推荐用 for(int i 0; i lengh; i) 的方式遍历 linkedlist, 而是使用 iterator 的方式遍历.remove(E)ArrayList底层就是一个数组, 因此按序查找快, 乱序插入, 删除因为涉及到后面元素移位所以性能慢.add(index, E)扩容一般默认容量是 10, 扩容后, 会 length*1.5.remove(E)循环遍历数组, 判断 E 是否 equals 当前元素, 删除性能不如 LinkedList.Stack经典的数据结构, 底层也是数组, 继承自 Vector, 先进后出 FILO, 默认 new Stack() 容量为 10, 超出自动扩容.push(E)pop()后缀表达式Stack 的一个典型应用就是计算表达式如 9 (3 - 1) * 3 10 / 2, 计算机将中缀表达式转为后缀表达式, 再对后缀表达式进行计算.中缀转后缀数字直接输出栈为空时遇到运算符直接入栈遇到左括号, 将其入栈遇到右括号, 执行出栈操作并将出栈的元素输出直到弹出栈的是左括号左括号不输出。遇到运算符 (加减乘除)弹出所有优先级大于或者等于该运算符的栈顶元素然后将该运算符入栈最终将栈中的元素依次出栈输出。计算后缀表达遇到数字时将数字压入堆栈遇到运算符时弹出栈顶的两个数用运算符对它们做相应的计算, 并将结果入栈重复上述过程直到表达式最右端运算得出的值即为表达式的结果队列与 Stack 的区别在于, Stack 的删除与添加都在队尾进行, 而 Queue 删除在队头, 添加在队尾.ArrayBlockingQueue生产消费者中常用的阻塞有界队列, FIFO.put(E)put(E) 队列满了final ReentrantLocklockthis.lock;lock.lockInterruptibly();try{while(count items.length)notFull.await();enqueue(e);}finally{lock.unlock();}take()当元素被取出后, 并没有对数组后面的元素位移, 而是更新 takeIndex 来指向下一个元素.takeIndex 是一个环形的增长, 当移动到队列尾部时, 会指向 0, 再次循环.private E dequeue() {// assert lock.getHoldCount() 1;// assert items[takeIndex] ! null;final Object[] items this.items;SuppressWarnings(unchecked)E x (E) items[takeIndex];items[takeIndex] null;if (takeIndex items.length){takeIndex 0;}count--;if (itrs ! null){itrs.elementDequeued();}notFull.signal();return x;}HashMap最常用的哈希表, 面试的童鞋必备知识了, 内部通过数组 单链表的方式实现. jdk8 中引入了红黑树对长度 8 的链表进行优化, 我们另外篇幅再讲.put(K, V****)put(K, V) 相同 hash 值resize 动态扩容当 map 中元素超出设定的阈值后, 会进行 resize (length * 2) 操作, 扩容过程中对元素一通操作, 并放置到新的位置.具体操作如下:在 jdk7 中对所有元素直接 rehash, 并放到新的位置.在 jdk8 中判断元素原 hash 值新增的 bit 位是 0 还是 1, 0 则索引不变, 1 则索引变成 原索引 oldTable.length.// 定义两条链// 原来的 hash 值新增的 bit 为 0 的链头部和尾部Node loHead null, loTail null;// 原来的 hash 值新增的 bit 为 1 的链头部和尾部Node hiHead null, hiTail null;Node next;// 循环遍历出链条链do{next e.next;if((e.hash oldCap) 0) {if(loTail null){loHead e;}else{loTail.next e;}loTail e;}else{if(hiTail null){hiHead e;}else{hiTail.next e;}hiTail e;}}while((e next) !null);// 扩容前后位置不变的链if(loTail !null) {loTail.next null;newTab[j] loHead;}// 扩容后位置加上原数组长度的链if(hiTail !null) {hiTail.next null;newTab[j oldCap] hiHead;}LinkedHashMap继承自 HashMap, 底层额外维护了一个双向链表来维持数据有序. 可以通过设置 accessOrder 来实现 FIFO(插入有序) 或者 LRU(访问有序) 缓存.put(K, V)get(K)accessOrder 为 false 的时候, 直接返回元素就行了, 不需要调整位置.accessOrder 为 true 的时候, 需要将最近访问的元素, 放置到队尾.removeEldestEntry 删除最老的元素** 为了让学习变得轻松、高效今天给大家免费分享一套 Java 教学资源。帮助大家在成为 Java 架构师的道路上披荆斩棘。需要资料的欢迎关注微信公众号Java知己**“不积跬步无以至千里”希望未来的你能有梦为马 随处可栖加油少年关注公众号:「Java 知己」每天更新Java知识哦期待你的到来发送「Group」与 10 万程序员一起进步。发送「面试」领取BATJ面试资料、面试视频攻略。发送「玩转算法」领取《玩转算法》系列视频教程。千万不要发送「1024」...
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913167.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!