JAVA基础知识(上)

# 一、说说&和&&的区别?

作为运算符:& 将二进制的每一位进行与运算

作为逻辑运算符:两者都是与,&& 如果左边为假则终止右边运算,即短路运算。& 则需要把两边的比较执行完

# 二、int和Integer的区别

int是Java的基本数据类型,而Integer是int的包装类

int直接存储整数值,而Integer是一个对象,包含了一些额外的方法和功能

int的默认值是0,而Integer的默认值是null

扩展:那么我们在判断这两个类型是否相等的时候有什么要注意的呢?

- int 和 int 类型的比较可以直接用 == 判断
- int 和 Integer 类型的比较时也可以用 == 、 Integer会自动拆箱为 int
- Integer 和 Integer 类型的比较中。如果数值范围在[-128,127]之间可以用 == 。其他范围只能用 equals 方法、原因是:JVM会维护这个范围内的缓存,比如第一个Integer是127,会存放在缓存中;在创建第二个Integer时会直接返回缓存的127,所以两者是相等的

# 三、接口和抽象类的区别

## 1.语法层面

- 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract (隐式声明)方法(JDK8默认方法);
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final(隐式声明)类型的(必须在声明时赋值);
- 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

## 2.设计层面

- 抽象类:是对整个类进行抽象,包括属性,行为(方法),那么一定是抽象类的种类(拥有同一种属性或行为的类)
- 接口:是对行为(行为)的抽象
- 抽象类是一种模板设计。接口是一种规范。

## 3.怎么选择

- 如果拥有一些方法,并想让他们中的一些有默认的具体实现,请选择抽象类
- 如果想实现多重继承,那么请使用接口,由于java不支持多继承,子类不能继承多个类,但一个类可以实现多个接口,因此可以使用接口来解决。
- 如果基本功能在不断变化,那么就使用抽象类,如果使用接口,那么每次变更都需要相应的去改变实现该接口的所有类。

4.JDK8中为什么会提供默认方法?

目的:用来减少抽象类和接口的差异,可以在接口中提供默认的实现方法并实现该接口的类不用强制去实现这个方法。JDK8中接口的静态方法只能通过接口名直接去调用,接口中的默认方法因为不是abstract的,所以可重写,也可以不重写。

 四、谈谈你对树Tree的理解(数据结构)?

1、树的由来

数组:检索效率高

链表:添加删除效率高

树:综合检索和操作的效率

2、树的分类

根据不同的分类方式,树可以分为不同的类型:

- 根据树分支的数量限制:

可以分为二叉树和多叉树。二叉树最多只有两个子节点,而多叉树一个节点可以有多于两个的子节点。
- 根据树节点的有序性:

可以分为查找树和无序树。查找树的基本特征为任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。无序树则没有特定的键值大小关系。
- 根据具体用途和特征:

例如红黑树、AVL树、平衡二叉树、平衡二叉搜索树等。红黑树是一种自平衡二叉查找树,AVL树也是一种自平衡二叉查找树,它要求任何节点的两个子树的高度差最大为1。平衡二叉树和平衡二叉搜索树则是为了平衡树的左右子树的高度差。
- 根据树的完整性和是否包含空值:

可以分为完全二叉树、满二叉树、完全二叉搜索树、满二叉搜索树等。完全二叉树和满二叉树是包含所有节点的二叉树,而完全二叉搜索树和满二叉搜索树则是所有节点都按照一定顺序排列的二叉搜索树。

3、常见树的特点

- 普通二叉查找树:倾斜的问题
- AVL自平衡:左旋右旋开销问题
- 红黑树:黑节点平衡、深度问题、二叉。作为内存中数据存储
- B树和B+树:多路查找、深度比较少、一般用于大规模数据存储、索引

## 4、TreeMap和HashMap的区别


TreeMap:本质就是红黑树的实现

HashMap:

以jdk8为例。就是通过 数组+链表+红黑树+算法实现的

通过上面的实现也可以看到HashMap综合的读写效率要比TreeMap高了

# 五、HashMap汇总
## 1. jdk8为什么引入了红黑树

因为链表长度增加后检索的效率急剧降低,复杂度是 O(n) https://blog.csdn.net/heihei2017/article/details/102775283

## 2.解决hash冲突。为什么不直接用红黑树?

因为红黑树需要进行左旋,右旋,变色这些操作来保持平衡,而单链表不需要。当元素小于 8 个的时候,此时做查询操作,链表结构已经能保证查询性能。
当元素大于 8 个的时候, 
红黑树搜索时间复杂度是O(logn),而链表是 O(n),此时需要红黑树来加快查询速度,但是新增节点的效率变慢了。

因此,如果一开始就用红黑树结构,元素太少,新增效率又比较慢,无疑这是浪费性能的。

## 3.**为什么链表改为红黑树的阈值是 8?**

首先和hashcode碰撞次数的泊松分布有关,主要是为了寻找一种时间和空间的平衡。在负载因子0.75(HashMap默认)的情况下,单个hash槽内元素个数为8的概率
小于百万分之一,将7作为一个分水岭,等于7时不做转换,大于等于8才转红黑树,
小于等于6才转链表。链表中元素个数为8时的概率已经非常小,再多的就更少了,所以原作者在选择链表元素个数时选择了8,是根据概率统计而选择的。

## 4. 默认加载因子为什么是0.75

这个是从时间和空间的角度综合得出的。

- 如果是1.0 当数组的值全部填充了才会发生扩容,此时Hash冲突是避免不了的。链表的操作或者红黑树的操作会牺牲时间来保证空间的利用率
- 如果是0.5 当数组中一半的数据利用了之后就会开始扩容。这时填充的数据少。hash冲突也会减少,底层的链表和红黑树的高度也会降低。查询效率增加。但是这时还有太多的空间没有利用。空间资源浪费了。
- 所以0.75是综合考虑得出的

## 5.为什么要右移16位?

其实是为了减少碰撞,进一步降低hash冲突的几率。int类型的数值是4个字节的,右移16位异或可以同时保留高16位于低16位的特征

当数组的长度很短时,只有低位数的hashcode值能参与运算。而让高16位参与运算可以更好的均匀散列,减少碰撞,进一步降低hash冲突的几率。并且使得高16位和低16位的信息都被保留了。

在HashMap的put方法里面,是通过Key的hash值与数组的长度取模计算得到数组的位置。

而在绝大部分的情况下,n的值一般都会小于2^16次方,也就是65536。

所以也就意味着i的值 , 始终是使用hash值的低16位与(n-1)进行取模运算,这个是由与运算符&的特性决定的。

这样就会造成key的散列度不高,导致大量的key集中存储在固定的几个数组位置,很显然会影响到数据查找性能。


## 6.为什么Hash值要与length-1相与

把 hash 值对数组长度取模运算,模运算的消耗很大,没有位运算快。
当 length 总是 2 的n次方时,h& (length-1) 运算等价于对length取模,也就是 h%length,但是 & 比 % 具有更高的效率。


## 7.介绍下put方法的流程

- 首先根据 key 的值计算 hash 值,找到该元素在数组中存储的下标;
- 如果数组是空的,则调用 resize 进行初始化;
- 如果没有哈希冲突直接放在对应的数组下标里;
- 如果冲突了,且 key 已经存在,就覆盖掉 value;
- 如果冲突后,发现该节点是红黑树,就将这个节点挂在树上;
- 如果冲突后是链表,判断该链表是否大于 8 ,如果大于 8 并且数组容量小于 64,
就进行扩容;如果链表节点大于 8 并且数组的容量大于 64,
则将这个结构转换为红黑树;否则,链表插入键值对,若 key 存在,就覆盖掉 value。



 

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

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

相关文章

智慧校园-资产管理系统总体概述

智慧校园资产管理系统是面向教育机构设计的一体化数字平台,其核心目标在于通过先进的信息技术手段,全面优化校园内部的资产管理流程。该系统致力于提升资产管理的效率与透明度,同时降低成本并确保所有操作符合财务及审计规范,为校…

springboot基于Java的超市进销存系统+ LW+ PPT+源码+讲解

第三章系统分析与设计 3.1 可行性分析 一个完整的系统,可行性分析是必须要有的,因为他关系到系统生存问题,对开发的意义进行分析,能否通过本网站来补充线下超市进销存管理模式中的缺限,去解决其中的不足等&#xff0c…

Cesium 二三维热力图

Cesium 二三维热力图 原理:主要依靠heatmap.js包来实现 效果图:

Vue 前端修改页面标题无需重新打包即可生效

在public文件夹下创建config.js文件 index.html页面修改 其他页面的标题都可以用window.title来引用就可以了!

Java项目:基于SSM框架实现的校园快递代取管理系统【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的校园快递代取管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…

关于 Mac 系统 .DS_store 文件的起源

原文:Arno - 2006.10.01 (前排提醒:可以在 .gitignore 中添加 .DS_Store,否则 git 仓库会存储这个和项目无关的文件。) 如果你是 Mac 用户,曾经将文件从 Mac 传输到 Windows,那么可能对 .DS_S…

Hadoop权威指南-读书笔记-02-关于MapReduce

Hadoop权威指南-读书笔记 记录一下读这本书的时候觉得有意思或者重要的点~ 还是老样子~挑重点记录哈😁有兴趣的小伙伴可以去看看原著😊 第二章 关于MapReduce MapReduce是一种可用于数据处理的编程模型。 MapReduce程序本质上是并行运行的&#xff0c…

算法体系-26 第二十六节:第26节:单调栈结构 (5节)

一 单调栈知识讲解 1.1描述 一个数组里面想的到每个位置与他最近的左边和右边比他小的最近的信息 1.2 分析 通过单调栈的特点,for遍历数组中的每个数,当前数来的时候对比单调栈中的数进行每个数的左右判断完满足条件的进行更新到当前i种的 int[][] re…

【鸿蒙学习笔记】Stage模型工程目录

官方文档:应用配置文件概述(Stage模型) 目录标题 FA模型和Stage模型工程级目录模块级目录app.json5module.json5程序执行流程程序基本结构开发调试与发布流程 FA模型和Stage模型 工程级目录 模块级目录 app.json5 官方文档:app.j…

【51单片机入门】数码管原理

文章目录 前言共阴极与共阳极数码管多个数码管显示原理 总结 前言 在我们的日常生活中,数码管被广泛应用于各种电子设备中,如电子表、计时器、电子钟等。数码管的主要功能是显示数字和一些特殊字符。在这篇文章中,我们将探讨数码管的工作原理…

【机器学习】机器学习与自然语言处理的融合应用与性能优化新探索

引言 自然语言处理(NLP)是计算机科学中的一个重要领域,旨在通过计算机对人类语言进行理解、生成和分析。随着深度学习和大数据技术的发展,机器学习在自然语言处理中的应用越来越广泛,从文本分类、情感分析到机器翻译和…

项目部署_持续集成_Jenkins

1 今日内容介绍 1.1 什么是持续集成 持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干 持续集成的组成要素 一个自动构建过程, 从检出代码、 编译构建…

【Python】基于KMeans的航空公司客户数据聚类分析

💐大家好!我是码银~,欢迎关注💐: CSDN:码银 公众号:码银学编程 实验目的和要求 会用Python创建Kmeans聚类分析模型使用KMeans模型对航空公司客户价值进行聚类分析会对聚类结果进行分析评价 实…

linux-5.10.110内核源码分析 - Freescale ls1012a pcie host驱动

1、dts pcie设备树 1.1、pcie设备树 pcie1: pcie3400000 {compatible "fsl,ls1012a-pcie";reg <0x00 0x03400000 0x0 0x00100000 /* controller registers */0x40 0x00000000 0x0 0x00002000>; /* configuration space */reg-names "regs", &…

尚硅谷k8s 2

p54-56 k8s核心实战 service服务发现 Service:将一组 Pods 公开为网络服务的抽象方法。 #暴露Deploy,暴露deploy会出现在svc kubectl expose deployment my-dep --port8000 --target-port80#使用标签检索Pod kubectl get pod -l appmy-depapiVersion: v1 kind: Service metad…

Python酷库之旅-第三方库Pandas(006)

目录 一、用法精讲 10、pandas.DataFrame.to_excel函数 10-1、语法 10-2、参数 10-3、功能 10-4、返回值 10-5、说明 10-6、用法 10-6-1、数据准备 10-6-2、代码示例 10-6-3、结果输出 11、pandas.ExcelFile类 11-1、语法 11-2、参数 11-3、功能 11-4、返回值 …

您的私人办公室!-----ONLYOFFICE8.1版本的桌面编辑器测评

随时随地创建并编辑文档&#xff0c;还可就其进行协作 ONLYOFFICE 文档是一款强大的在线编辑器&#xff0c;为您使用的平台提供文本文档、电子表格、演示文稿、表单和 PDF 编辑工具。 网页地址链接&#xff1a; https://www.onlyoffice.com/zh/office-suite.aspxhttps://www…

Zynq系列FPGA实现SDI视频编解码,基于GTX高速接口,提供5套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案在Xilinx--Kintex系列FPGA上的应用 3、详细设计方案设计原理框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGB图像缓存视频读取控制HDMI输出RGB转BT1120Gv8500 驱…

Docker 运行Nacos无法访问地址解决方法

参考我的上一篇文章去配置好镜像加速器&#xff0c;镜像加速器不是配置越多越好&#xff0c;重试次数多了会失败 Dockerhub无法拉取镜像配置阿里镜像加速器-CSDN博客 错误的尝试 最开始按照网上的方式去配了一大堆&#xff0c;发现下不下来。 镜像源地址&#xff1a;https:…

Kafka-服务端-副本同步-源码流程

杂 在0.9.0.0之前&#xff0c;Kafka提供了replica lag.max.messages 来控制follower副本最多落后leader副本的消息数量&#xff0c;follower 相对于leader 落后当超过这个数量的时候就判定该follower是失效的&#xff0c;就会踢出ISR&#xff0c;这里的指的是具体的LEO值。 对…