iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >jdk8中常用数据结构及其设计原理是什么
  • 260
分享到

jdk8中常用数据结构及其设计原理是什么

2024-04-02 19:04:59 260人浏览 八月长安
摘要

今天小编给大家分享一下jdk8中常用数据结构及其设计原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们

今天小编给大家分享一下jdk8中常用数据结构及其设计原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1. LinkedList

LinkedList经典的双链表结构,适用于乱序插入,删除。指定序列操作则性能不如ArrayList,这也是其数据结构决定的。

add(E) / addLast(E)

jdk8中常用数据结构及其设计原理是什么

add(index, E)

这边有个小的优化,他会先判断index是靠近队头还是队尾,来确定从哪个方向遍历链入。

if (index < (size >> 1)) {  node<E> x = first;  for (int i = 0; i < index; i++)  x = x.next;  return x; } else {  Node<E> x = last;  for (int i = size - 1; i > index; i--)  x = x.prev;  return x; }

jdk8中常用数据结构及其设计原理是什么

靠队尾

jdk8中常用数据结构及其设计原理是什么

get(index)

也是会先判断index,不过性能依然不好,这也是为什么不推荐用for(int i = 0; i < lengh;  i++)的方式遍历linkedlist,而是使用iterator的方式遍历。

jdk8中常用数据结构及其设计原理是什么

jdk8中常用数据结构及其设计原理是什么

remove(E)

jdk8中常用数据结构及其设计原理是什么

2. ArrayList

ArrayList底层就是一个数组,因此按序查找快,乱序插入,删除因为涉及到后面元素移位所以性能慢。

add(index, E)

jdk8中常用数据结构及其设计原理是什么

扩容

一般默认容量是10,扩容后,会length*1.5。

jdk8中常用数据结构及其设计原理是什么

remove(E)

循环遍历数组,判断E是否equals当前元素,删除性能不如LinkedList。

jdk8中常用数据结构及其设计原理是什么

3. Stack

Stack是经典的数据结构,底层也是数组,继承自Vector,先进后出FILO,默认new Stack()容量为10,超出自动扩容。

push(E)

jdk8中常用数据结构及其设计原理是什么

pop()

jdk8中常用数据结构及其设计原理是什么

4. 后缀表达式

Stack的一个典型应用就是计算表达式如 9 + (3 - 1) * 3 + 10 /  2,计算机将中缀表达式转为后缀表达式,再对后缀表达式进行计算。

中缀转后缀

  • 数字直接输出

  • 栈为空时,遇到运算符,直接入栈

  • 遇到左括号, 将其入栈

  • 遇到右括号, 执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。

  • 遇到运算符(加减乘除):弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈

  • 最终将栈中的元素依次出栈,输出。 

jdk8中常用数据结构及其设计原理是什么

计算后缀表达

  • 遇到数字时,将数字压入堆栈

  • 遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算, 并将结果入栈

  • 重复上述过程直到表达式最右端

  • 运算得出的值即为表达式的结果 

jdk8中常用数据结构及其设计原理是什么

5. 队列

与Stack的区别在于:Stack的删除与添加都在队尾进行,而Queue删除在队头,添加在队尾。

ArrayBlockingQueue

生产消费者中常用的阻塞有界队列,FIFO。

put(E)

jdk8中常用数据结构及其设计原理是什么

put(E) 队列满了

final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try {  while (count == items.length)  notFull.await();  enqueue(e); } finally {  lock.unlock(); }

jdk8中常用数据结构及其设计原理是什么

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;  }

jdk8中常用数据结构及其设计原理是什么

6. HashMap

最常用的哈希表,面试的童鞋必备知识了,内部通过数组 + 单链表的方式实现。dk8中引入了红黑树对长度 >  8的链表进行优化,我们另外篇幅再讲。

put(K, V)

jdk8中常用数据结构及其设计原理是什么

put(K, V) 相同hash值

jdk8中常用数据结构及其设计原理是什么

resize 动态扩容

当map中元素超出设定的阈值后,会进行resize (length * 2)操作,扩容过程中对元素一通操作,并放置到新的位置。

具体操作如下:

  • 在jdk7中对所有元素直接rehash, 并放到新的位置.

  • 在jdk8中判断元素原hash值新增的bit位是0还是1, 0则索引不变, 1则索引变成"原索引 + oldTable.length".

//定义两条链  //原来的hash值新增的bit为0的链,头部和尾部  Node<K,V> loHead = null, loTail = null;  //原来的hash值新增的bit为1的链,头部和尾部  Node<K,V> hiHead = null, hiTail = null;  Node<K,V> 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) { 32 hiTail.next = null; 33 newTab[j + oldCap] = hiHead; 34 }
jdk8中常用数据结构及其设计原理是什么

7. LinkedHashMap

继承自HashMap,底层额外维护了一个双向链表来维持数据有序。可以通过设置accessOrder来实现FIFO(插入有序)或者LRU(访问有序)缓存

put(K, V)

jdk8中常用数据结构及其设计原理是什么

get(K)

accessOrder为false的时候,直接返回元素就行了,不需要调整位置。

accessOrder为true的时候,需要将最近访问的元素,放置到队尾。

jdk8中常用数据结构及其设计原理是什么

removeEldestEntry 删除最老的元素

jdk8中常用数据结构及其设计原理是什么

以上就是“jdk8中常用数据结构及其设计原理是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: jdk8中常用数据结构及其设计原理是什么

本文链接: https://www.lsjlt.com/news/71203.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • jdk8中常用数据结构及其设计原理是什么
    今天小编给大家分享一下jdk8中常用数据结构及其设计原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2024-04-02
  • Redis数据结构原理是什么
    本篇内容介绍了“Redis数据结构原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!RedisDbRedis服务器默认有16个数据库,...
    99+
    2023-07-05
  • MySQL中的常用树形结构设计是什么
    今天小编给大家分享一下MySQL中的常用树形结构设计是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 递归表idpi...
    99+
    2023-07-05
  • java常用数据结构是什么
    这篇文章将为大家详细讲解有关java常用数据结构是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。java数据结构有:1、数组;2、链表,一种递归的数据结构;3、栈,按照“后进先出”、“先进后出”的原则...
    99+
    2023-06-14
  • JWT的原理和数据结构是什么
    这篇文章主要介绍“JWT的原理和数据结构是什么”,在日常操作中,相信很多人在JWT的原理和数据结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JWT的原理和数据结构是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • 队列的数据结构和原理及其在PHP与MySQL中的应用
    引言队列是一种常见的数据结构,它基于先进先出(FIFO)的原则,既可以用于存储和检索数据,也可以在并发环境中实现任务调度。在本文中,我们将探讨队列的基本原理和数据结构,并举例说明它在PHP与MySQL中的应用。队列的原理队列是一种线性数据结...
    99+
    2023-10-21
    队列 数据结构 PHP应用 MySQL应用
  • rainbond的架构设计原理是什么
    这篇“rainbond的架构设计原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“rainbond的架构设计原理是什么...
    99+
    2023-06-29
  • hbase数据原理及基本架构是什么
    这篇文章主要介绍了hbase数据原理及基本架构是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇hbase数据原理及基本架构是什么文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • java常见的数据结构是什么
    今天小编给大家分享一下java常见的数据结构是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。本教程操作环境:window...
    99+
    2023-06-30
  • Redis常用数据结构哈希表是什么
    这篇文章主要介绍“Redis常用数据结构哈希表是什么”,在日常操作中,相信很多人在Redis常用数据结构哈希表是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis常用数据结构哈希表是什么”的疑惑有所...
    99+
    2023-07-06
  • Redis中数据结构是什么
    这篇文章主要介绍了Redis中数据结构是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在实际开发,Redis使用会频繁,那么在使用过程中...
    99+
    2024-04-02
  • React Flux与Redux设计及使用原理是什么
    本篇内容主要讲解“React Flux与Redux设计及使用原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React Flux与Redux设计及使用原理是什么”吧!...
    99+
    2023-07-05
  • Java数据结构之链表的概念及结构是什么
    今天小编给大家分享一下Java数据结构之链表的概念及结构是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、 链表的概念...
    99+
    2023-07-05
  • C#中的数据结构是什么
    小编给大家分享一下C#中的数据结构是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、数组(Array)数组具有以下的特点:数组属于线性结构,在内存中是连续存...
    99+
    2023-06-29
  • Container应用设计原理是什么
    这篇文章主要介绍“Container应用设计原理是什么”,在日常操作中,相信很多人在Container应用设计原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Container应用设计原理是什么”的疑...
    99+
    2023-06-04
  • zookeeper数据结构及基本命令是什么
    Zookeeper是一个开源的分布式协调服务,它可以用于构建和管理分布式应用程序的配置信息,命名服务、分布式锁、分布式队列等。Zoo...
    99+
    2023-10-22
    zookeeper
  • 计算机中结构化程序设计原则主要有四个原则分别是什么
    这篇文章将为大家详细讲解有关计算机中结构化程序设计原则主要有四个原则分别是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。结构化程序设计原则主要有四个原则:1、自顶向下;先从最上层总目标开始设计,逐步使...
    99+
    2023-06-08
  • Java数据结构常见几大排序是什么
    这篇文章给大家分享的是有关Java数据结构常见几大排序是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、排序的概念和分类1.排序的基本概念排序是将一批无序的记录(数据)重新排列成按关键字有序的记录序列的过程...
    99+
    2023-06-29
  • Golang标准库中的常见数据结构及用法
    Golang标准库中的常用数据结构及应用 引言:Golang是一个简洁、高效的编程语言,其标准库包含了各种常用的数据结构,如数组、切片、映射、堆栈等。本文将介绍Golang标准库中常用的数据结构及其应用,并提...
    99+
    2024-01-20
    Golang 数据结构 标准库 关键词提取如下:
  • PHP7中zval结构和引用计数机制是什么
    这篇文章主要介绍PHP7中zval结构和引用计数机制是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近在查阅 PHP7 垃圾回收的资料的时候,网上的一些代码示例在本地环境下运行时出现了不同的结果,使我一度非常迷...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作