学习
实践
活动
专区
工具
TVP
写文章

hashmap面试题简书_java面试问答题

大家好,又见面了,我是你们朋友全栈君。 JAVAHashMap面试题整理 JDK1.7版本,HashMap数据结构是什么? 数组+单向链表 什么叫做Hash桶 数组单向链表 HashMap数组长度为什么必须是2幂? 计算元素存在数组中下标的算法:hash值 & 数组长度-1 如果数组长度不是2幂,减1后二进制某一位有可能出现0,导致数组某个位置永远存不到数据 HashMap默认负载因子是多少,作用是什么? 因为数组长度必须是2幂并且HashMap数组最大长度变量为int类型,所有1<<30 什么叫做Hash碰撞/冲突? 两个对象hash值一样,导致在数组下标一样 HashMap何时扩容? 元素个数>=阈值,并且存入数据位置不等于null HashMap扩容机制是什么? 原来2倍 HashMap存入null键位置? hash数组下标为0位置 什么叫做Hash回环?

12320

javascanner意思_JavaScanner

对于Scanner进一步理解还是在LeetCode一道算法题上,题目大意是输入一组分式加法构成字符串,要求输出分式相加结果。首先是输入”-2/3+2/3-4/5″,接着求其和。 首先第一步需要解析字符串为所需数据,我使用了split()方式,有位大哥就使用了`scanner.useDelimiter(pattern)`方法,直接将数据解析到了Scaner对象。 # Scanner工作方式 Scanner分隔符模式将输入分割到令牌(token,就是临时存储区域),默认情况下以**空格**分割。然后可以使用各种next方法将得到令牌转换成不同类型值。 `pattern模式`,并返回一个新Scanner对象。 **总结:使用Scanner+正则组合可以简化很多字符串处理,而无需使用大量代码分割字符串和数值转换。

16740
  • 广告
    关闭

    2023新春采购节

    领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    javafinalized用法_java引用类型

    一个例子 Object类是所有类父类,如果你去查看java.lang.Object类源码,你会发现里面有个finalize方法,这个方法没有默认实现,需要子类根据实际情况重写这个方法,但是如果不恰当使用 类里也有一个引用队列,这个引用队列是JVM和垃圾回收器打交道唯一途径,当垃圾回收器需要回收该对象时,会把该对象放到引用队列,这样java.lang.ref.Finalizer类就可以从队列取出该对象 $100(Finalizer.java:14) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 这个线程唯一职责就是不断java.lang.ref.Finalizer.ReferenceQueue队列取对象,当一个对象进入到队列,finalizer线程就执行对象finalize方法并且把对象从队列删除,因此在下一次 histo:live 8700|head -n 10命令强制触发一次GC,结果和前面的分析一致,Finalizer对象都放到引用队列,并依次调用了对象finalize方法,内存java.lang.ref.Finalizer

    14210

    javagetclass_javagetClass()函数

    大家好,又见面了,我是你们朋友全栈君。 Java反射学习 所谓反射,可以理解为在运行时期获取对象类型信息操作。 1,获得类型类 我们知道在Java中一切都是对象,我们一般所使用对象都直接或间接继承自Object类。Object类包含一个方法名叫getClass,利用这个方法就可以获得一个实例类型类。 类型类指的是代表一个类型类,因为一切皆是对象,类型也不例外,在Java使用类型类来表示一个类型。所有的类型类都是Class类实例。 可以看到,对象a是A一个实例,A某一个类,在if语句中使用a.getClass()返回结果正是A类型类,在Java中表示一个特定类型类型类可以用“类型.class”方式获得,因为a.getClass 特别注意是,类型类是一一对应,父类类型类和子类类型类是不同,因此,假设A是B子类,那么如下代码将得到 “unequal”输出: A a = new A(); if(a.getClass(

    21920

    javastringbuffer是什么_java&和&&区别

    大家好,又见面了,我是你们朋友全栈君。 JAVA提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符字符数据。 这个String类提供了不可改变字符串。 而这个StringBuffer类提供字符串可以进行修改。 String: 为不可变对象,一旦被创建,就不能修改它值. 对于已经存在String对象修改都是重新创建一个新对象,然后把新值保存进去. ;//error 对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer 付值时候可以通过它append方法. ss.append(“w!”) 而String是不能被修改,只能重复去创建对象来实现修改。——如果频繁对字符串进行追加、替换、修改、插入、删除操作,最好使用StringBuffer。

    12630

    Java>>,>>>和

    前言 我们都知道对于有符号数据类型,二进制最左端数字为符号位,0代表正,1代表负,这里先介绍几个概念 逻辑左移=算术左移:高位溢出,低位补0 逻辑右移:低位溢出,高位补0 算术右移:低位溢出,高位用符号位值补 比如一个有符号位8位二进制数10101010,[]是添加数字 逻辑左移一位:0101010[0] 逻辑左移两位:101010[00] 算术左移一位:0101010[0] 算术左移两位:101010 [00] 逻辑右移一位:[0]1010101 逻辑右移两位:[00]101010 算术右移一位:[1]1010101 算术右移两位:[11]101010 算术左移和算术右移主要用来进行有符号数倍增 、减半 逻辑左移和逻辑右移主要用来进行无符号数倍增、减半 Java是没有无符号数据类型,C和C++中有 符号 例子 解释 << num<< n 算术左移 相当于 num*(2n次方) > > num>>n 算术右移 相当于num/(2n次方) >>> num>>>n 逻辑右移,当num为正数和算术右移一个效果 例子 public static void main(String[] args

    72330

    Java管程

    Java是利用 管程解决并发编程问题,那么究竟什么是 管程?而它又是如何解决并发问题呢? 什么是管程 管程,英文名是 Monitor ,因此有的时候会被翻译为 监视器。 我理解是:我们通过管程管理 Java 类,使得类是线程安全。 这应该是 管程最终要达到效果,那么,它是怎么做到呢? 管程模型 管程这个概念最早来源于操作系统,操作系统发展了那么多年,管程实现也有多种方式,主流有三种:Hasen模型、 Hoare模型和 MESA模型, Java 借鉴是 MESA模型,让我们来重点看一下 等待队列,当线程发现自己 条件变量不满足时,就进入相应 等待队列中排队,直至 条件变量满足,那么其 等待队列线程也不会是立马执行,而是到最开始 共享变量对应 等待队列再次排队,重复之前过程 );         /**          * 最大容量          */         private int capacity;         /**          * 当前容器存储数量

    55230

    Java变量

    关注我们 注:下面讲到初始化就是赋值意思 变量 基本概念 我们通过变量来操纵存储空间中数据,变量就是指代这个存储空间!空间位置是确定,但是里面放置什么值不确定! 编号就对应于我们变量变量名,里面存什么对应于我们变量值。 Java 是一种强类型语言,每个变量都必须声明其类型。 Java 变量是程序中最基本存储单元,其要素包括变量名,变量类型和作用域。 可以在一行声明多个变量: int i ,j; 不提倡这种风格,逐一声明每一个变量可以提高程序可读性。 可以将变量声明和初始化放在同一行,例如: int age = 18; float e = 2.718281828f; 变量分类: 局部变量( lacal variable): 方法或语句块内部定义变量 注:对于局部变量 java 虚拟机并不会给它自行初始化,也就是并不会给它赋上该类型默认值,局部变量需要自己去初始化。

    66310

    java运算 ^, >,&

    3)); //打印结果是:2^3运算结果是 :1} 那么这个1是怎么来,我们要知道^、<<、>>等位运算符主要针对二进制,算异或时候相同为0,不同为1 2转换成二进制是0010 //2<<3运算结果是 :16} 在运算时候同样要把十进制转换成二进制, 2二进制是0010 ,向左移3位后面用000不齐,结果是10000 二进制10000转换成十进制是16(从右往左分别是1,2,4,8,16,32 3)); //2>>3运算结果是 :0} 原理和左移是一样,先转成二进制0010,再向右侧移动三位,向右侧移动时候在左侧不齐0,移动几位不齐几位,移动后二进制是0000 转成十进制就是0了 &运算 按位“与”计算是把两个数字分别写成二进制形式,然后按照每一位判断,&计算,只要有一个是0就算成0 看下例子:System.out.println(1&2);打印0 , System.out.println (1&1);打印1 下面解释下原因 1二进制为:0001 2二进制为:0010 运算结果为:0000 ->0 同理两个1&运算二进制结果为0001->结果为1

    59820

    Java

    下面我们看一下Lock接口提供方法,便于更好阅读,请读者可先查看java.util.concurrent.locks.Lock源码,跟着源码注释一起理解接口中方法。 2.7.2 队列同步器AQS 本章节是介绍Java锁,也可以换个说法是讲Java同步组件,典型代表有ReentrantLock、CountDownLatch、ReentrantReadWriteLock 2.7.3 显示锁 本小结介绍Java两个比较重要显示锁使用,一个是ReentrantLock,另一个是ReentrantReadWriteLock。 可能读者会有疑问,因为几乎所有资料都会把ReentrantLock视为重入锁,没错,从名字上看他确实是可重入性锁,之所以小标题使用显示锁是因为,我们知道在JAVAReentrantLock 和synchronized 源码释放锁方法大家可以自行去源码阅读,篇幅原因,不贴出。

    22230

    java

    java中用来描述具有共同性质一组事物自定义复合数据类型—类。 复合数据类型本质—【根据自己需求制作自己需要数据类型模式/规则/公式】 4.2.如何编写一个Java类? { } 4.3.Java可以编写什么? 基本属性——变量 基本功能—–方法 变量–是用来在类描述事物基本属性 方法–是用来在类描述事物基本功能 4.4.Java变量分类及其基本特征? 变量—保存数据 1.数据类型【不一定就是之前基本数据类型,也有可能是自定义复合数据类型】 2.变量名称【合法标识符–全字母小写】 3.初始值 4.作用域 按照在类编写变量位置划分 在同一个类成员变量与某一个方法局部变量名称相同,这是我们在方法中使用这个成员变量时候,得到结果是局部变量值,此时就是方法局部变量将类成员变量值隐藏了,这就是成员变量隐藏。

    11830

    Java

    点击上方 好好学java ,选择 星标 公众号 重磅资讯、干货,第一时间送达今日推荐:用好Java枚举,真的没有那么简单! ” 先来看下利用synchronized实现同步基础:Java每一个对象都可以作为锁。 具体表现为以下3种形式。 对于普通同步方法,锁是当前实例对象。 2.2.3 锁存放位置 锁标记存放在Java对象头Mark Word。 ? Java对象头长度 ? 32位JVM Mark Word 结构 ? 32位JVM Mark Word 状态变化 ? 2.2.4 锁优缺点对比 ? image.png 2.3、CAS ★CAS,在Java并发应用通常指CompareAndSwap或CompareAndSet,即比较并交换。 3、Java锁实现 3.1、队列同步器(AQS) ★队列同步器AbstractQueuedSynchronizer(以下简称同步器),是用来构建锁或者其他同步组件基础框架。

    54531

    java异常

    Java异常 异常:直观理解就是不正常,不完全正确,可能存在某些问题。在实际编写程序过程,往往可能出于疏忽而导致程序出现bug。 合理处理异常,会使得程序健壮性,可读性以及可维护性得到大大提高。 在java,提供了优秀异常机制,当程序出现在运行时期异常和编译阶段异常,提供解决错误方法。 错误:是指系统出现错误或运行环境出现错误,此类错误非常严重。即使捕捉到也不能够有效处理,由java虚拟机生成并抛出,通常这类型错误是由系统错误引起。 下图是java异常层次结构: 在程序显式进行异常处理 1.捕获可能存在异常。 使用自定义异常 有时候,系统提高异常并不能完全够实际开发使用,由于java继承机制,可以很好提高代码复用。

    16010

    Java NaN

    在这篇文章,我们对 Java  NaN 进行一些简单描述和说明和在那些操作过程可以尝试这个值,和可以如何去避免。 什么是 NaN NaN 通常表示一个无效操作结果。  例如,你尝试将数字 0 去除以 0,这个在数学是不存在,同时在 Java 定义 NaN 也确实就是通过这个不存在操作来定义。 我们通常也使用 NaN 来表示不能显示变量值。  在 Java 没有针对其他数据类型定义 NaN 了。 NaN 在绝大部分情况下都不是一个有效输入参数,因此在 Java 方法,我需要对输入参数进行比较,以确保输入参数值不是 NaN,然后我们能够对输入参数进行正确处理。 ,我们对 NaN 情况进行了一些简单讨论,同时我们也讨论了在实际计算可能会有哪些情况会导致产生 NaN,同时对如何进行 NaN 在 Java 比较和计算也提供了一些实例。

    1.4K20

    Java注释

    单行注释 写法: //此行后面均是注释内容 例如://我是一行注释|´・ω・)ノ 多行注释 写法: /* 我是注释内容1 我是注释内容2 */ 单/多行注释作用: 增强代码可读性 文档注释 写法: /** *我是文档注释内容 */ 文档注释作用: 注释允许你在程序嵌入关于程序信息。 你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件。 说明注释,使你更加方便记录你程序信息。 javadoc标签 在开始 /** 之后,第一行或几行是关于类、变量和方法主要描述。 之后,你可以包含一个或多个各种各样 @ 标签。 每一个 @ 标签必须在一个新行开始或者在一行开始紧跟星号(*). 多个相同类型标签应该放成一组。例如,如果你有三个 @see 标签,可以将它们一个接一个放在一起。 示例:

    13420

    扫码关注腾讯云开发者

    领取腾讯云代金券