当前位置: 首页 > news >正文

石家庄建设局官方网站网络广告发布

石家庄建设局官方网站,网络广告发布,自己做网站推广在那个网站,漯河网站建设漯河73、介绍下 HashMap 的底层数据结构 我们现在用的都是 JDK 1.8,底层是由“数组链表红黑树”组成,如下图,而在 JDK 1.8 之前是由“数组链表”组成。 1.Hash Hash叫做”散列表“,就是把任意长度的输入,通过散列算法&am…

73、介绍下 HashMap 的底层数据结构

我们现在用的都是 JDK 1.8,底层是由“数组+链表+红黑树”组成,如下图,而在 JDK 1.8 之前是由“数组+链表”组成。

1.Hash

Hash叫做”散列表“,就是把任意长度的输入,通过散列算法,变成固定长度输出,该输出结果是散列值。
其实这种转换是一种压缩映射,
散列表的空间通常小于输入的空间不同的输入可能会散列成相同的输出,所以不能从散列表来唯一的确定输入值。这就出现了Hash冲突

74、为什么要改成“数组+链表+红黑树”?

主要是为了提升在 hash 冲突严重时(链表过长)的查找性能,使用链表的查找性能是 O(n),而使用红黑树是 O(logn)。

75、那在什么时候用链表?什么时候用红黑树?


对于插入,默认情况下是使用链表节点。当同一个索引位置的节点在新增后超过8个(阈值8):如果此时数组长度大于等于 64,则会触发链表节点转红黑树节点(treeifyBin);而如果数组长度小于64,则不会触发链表转红黑树,而是会进行扩容,因为此时的数据量还比较小。

对于移除,当同一个索引位置的节点在移除后达到 6 个,并且该索引位置的节点为红黑树节点,会触发红黑树节点转链表节点(untreeify)。

 78、HashMap 的扩容(resize)流程是怎么样的?

 

77、HashMap 的插入流程是怎么样的?

79、除了 HashMap,还用过哪些 Map,在使用时怎么选择? 

 

 

90、Java 内存结构(运行时数据区)


程序计数器:线程私有。一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空。

Java虚拟机栈:线程私有。它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

本地方法栈:线程私有。本地方法栈与虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。

Java堆:线程共享。对大多数应用来说,Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

方法区:与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息(构造方法、接口定义)、常量、静态变量、即时编译器编译后的代码(字节码)等数据。方法区是JVM规范中定义的一个概念,具体放在哪里,不同的实现可以放在不同的地方。

运行时常量池:运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

String str = new String("hello");
上面的语句中变量 str 放在栈上,用 new 创建出来的字符串对象放在堆上,而"hello"这个字面量是放在堆中。

93、类加载的过程


类加载的过程包括:加载、验证、准备、解析、初始化,其中验证、准备、解析统称为连接。

加载:通过一个类的全限定名来获取定义此类的二进制字节流,在内存中生成一个代表这个类的java.lang.Class对象。

验证:确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。

准备:为静态变量分配内存并设置静态变量初始值,这里所说的初始值“通常情况”下是数据类型的零值。

解析:将常量池内的符号引用替换为直接引用。

初始化:到了初始化阶段,才真正开始执行类中定义的 Java 初始化程序代码。主要是静态变量赋值动作和静态语句块(static{})中的语句

String,StringBuffer,StringBuilder区别

 

 

问题提出
StringBuffer的源代码中将其定义为final类型,为什么StringBuffer的值仍可改变?

public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, Comparable<StringBuffer>, CharSequence


问题解决
**

final修饰的成员变量为基本数据类型时,赋值后无法改变。
当final修饰的为引用变量时,在赋值后其指向地址无法改变,但对象内容可以改变。**

 

 

在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

http://www.mmbaike.com/news/102769.html

相关文章:

  • 咸阳做网站的公司电话黄山网络推广公司
  • 红酒营销 网站建设百度一下首页手机版
  • 顾小北wordpress主题seo刷关键词排名免费
  • 做犯法任务的网站博客推广的方法与技巧
  • 校园网站建设的必要性论文发外链的论坛
  • shanxi建设银行网站首页云优化软件
  • 哪个网站可以用来做读书笔记百度推广登录首页网址
  • 上海城乡建设委员会的网站网络营销计划书怎么写
  • 云计算 网站建设宁波seo高级方法
  • 易县做网站的在哪微信营销方式
  • 中国建筑装饰网网址新野seo公司
  • 阿里巴巴能拿货在家里做的网站广州抖音推广公司
  • 包牛牛网站怎么做百度官方网站登录
  • 自己 做网站学什么 平面设计移动建站模板
  • 个人网站备案可以做项目网站搜索引擎优化是什么
  • 网站做次级页面百度平台联系方式
  • 一键做单页网站徐州seo代理计费
  • 淮安那家公司做网站国内ip地址 免费
  • 做吃的教程网站全网搜索软件
  • 网站验收模版seo咨询邵阳
  • 怎么做推销产品的网站什么是百度指数
  • wordpress 商品站制作企业网站
  • php网站的数据库怎么做备份网站更新seo
  • 价钱网站建设独立站怎么搭建
  • 购物网站开发需要什么软件如何在百度发布短视频
  • 出口俄罗斯的外贸公司跟我学seo从入门到精通
  • 鹤壁网站优化成都seo排名
  • 购物网站 英文介绍厦门网站搜索引擎优化
  • 网站开发进度安排文档搜索引擎优化排名关键字广告
  • 教育网站建设 培训网站建设友情链接交换平台