面试题-Java集合(新更新版本)
前言
Java集合部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,希望对大家起到一定的帮助。
Java集合
Java集合
说说Arraylist 与 LinkedList 区别?
ArrayList的底层数据结构是数组,LinkedList的底层数据结构是链表。
问题的本质其实是数组和链表的区别:
- 查找方面:按值查找的话,数组和链表的时间复杂度都是O(N);按索引查找的话,数组的时间复杂度是O(1),链表的时间复杂度是O(N)
- 插入和删除方面:数组的插入和删除因为需要移动数据,所以平均时间复杂度为O(N);链表为O(1)
说⼀说 ArrayList 的扩容机制?
按照1.5倍的长度来创建一个新的数组,然后把原始数据拷贝过去。
在实际开发中,如果插入的数据量较大,可以使用ensureCapacity提前扩容到指定大小,来提高性能。
HashSet的底层实现?
HashSet底层用的就是HashMap实现的,key存储实际的对象,value存储一个默认的Object
说一说HashMap的底层数据结构 和 扩容机制
- Jdk1.8以前,是数组+链表;1.8以后,是数组+链表或者红黑树;当链表长度达到8时,会转变为红黑树,目的是为了提高按照值查找时的时间复杂度,从链表的O(N)提高到红黑树的O(logN)
- 默认初始化一个长度为16的数组,当 键值对个数 > 数组长度 * 负载因子时 就会进行扩容,扩容至原始长度的2倍。
HashMap的长度为什么是2的幂次方?
hash值需要根据数组实际长度进行取模运算从而找到索引位置,如果是2的幂次方,可以把取模运算转化为位运算,提高性能。h%length == h&(length-1)
HashMap和Hashtable的区别?
HashMap不是线程安全的,当rehash时可能会形成环形链表;HashTable是线程安全的,实现机制是加sync锁
HashTable不允许存Null的key和value,HashMap则可以。
ConcurrentHashMap 和 Hashtable 的区别?
ConcurrentHashMap在1.7之前,使用分段锁来提高并发度;1.8之后,使用sync+CAS来实现线程安全,并且只锁定链表的头部,效率比分段锁又有所提高。
面试题-Java集合(新更新版本)的更多相关文章
- 面试题:Java集合面试题(40道) 背1
Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点.这里,我列出了一些关于Java集合的重要问题和答案. 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言 ...
- 剑指offer面试题-Java版-持续更新
最近在用Java刷剑指offer(第二版)的面试题.书中原题的代码采用C++编写,有些题的初衷是为了考察C++的指针.模板等特性,这些题使用Java编写有些不合适.但多数题还是考察通用的算法.数据结构 ...
- java面试题-Java集合相关
1. ArrayList 和 Vector 的区别 ArrayList和Vector底层实现原理都是一样得,都是使用数组方式存储数据 Vector是线程安全的,但是性能比ArrayList要低. Ar ...
- VS Code Java 3月更新|代码补全、Maven 以及 Java 插件预览版本新升级!
Nick Zhu Senior Program Manager, Developer Division at Microsoft 大家好,欢迎来到 Visual Studio Code Java 的 ...
- Java集合框架梳理(含经典面试题)
Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构. 1. 整体框架 Java容器类库一共有两种主要类型:Collection ...
- java 面试题整理(不定期更新)
一.Java基础 1.Java面向对象的三个特征与含义 三大特征是:封装.继承和多态. 封装是指将某事物的属性和行为包装到对象中,这个对象只对外公布需要公开的属性和行为,而这个公布也是可以有选择性的公 ...
- Java集合面试题汇总篇
文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱 作为一位小菜 "一面面试官",面试过程中,我肯定会问 Java 集合的内容,同时作为求职者,也肯定会 ...
- Java集合框架面试题
www.cnblogs.com/zhxxcq/archive/2012/03/11/2389611.html 这里的两个图很形象,由于放进图片链接,图片显示不了,所以只能给出该链接. Java集合框架 ...
- Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- 入职大厂,齐姐精选的 9 道 Java 集合面试题
Java 集合框架其实都讲过了,有一篇讲 Collection 的,有一篇讲 HashMap 的,那没有看过的小伙伴快去补下啦,文末也都有链接:看过的小伙伴,那本文就是检测学习成果的时候啦 今天这篇文 ...
随机推荐
- Android稳定性(一):内存使用指南
本文同步发布于公众号:移动开发那些事:Android稳定性(一):内存使用指南 1 背景 团队内目前使用Flutter来开发移动端的应用,不可避免会涉及到一些原生代码的编写,而团队内有好些iOS出身的 ...
- weixueyuan-Nginx缓存6
https://www.weixueyuan.net/nginx/cache/ Nginx Web缓存配置 Web 缓存可节约网络带宽,有效提高用户打开网站的速度.由于应用服务器被请求次数的降低,也相 ...
- w3cschool-微信小程序开发文档-工具
微信小程序工具 概览 2020-07-22 15:24 更新 为了帮助开发者简单和高效地开发微信小程序,我们推出了全新的开发者工具,集成了开发调试.代码编辑及程序发布等功能. 扫码登录 启动工具时,开 ...
- colab 使用技巧
无法进入目录 import os path = "/content/TaBERT/" os.chdir(path) print(os.getcwd()) 无法执行conda !pi ...
- FastReport实现遍历Dataset数据集计算
delphi在使用fastreport进行打印时,需要对数据进行计算求和. 在打印文本框的OnBeforePrint事件中进行以下代码即可实现效果 procedure Memo7OnBeforePri ...
- Ceph的crush算法与一致性hash对比介绍
本文分享自天翼云开发者社区<Ceph的crush算法与一致性hash对比介绍>,作者:l****n 首先,我们先回顾下一致性hash以及其在经典存储系统中的应用. 一致性hash的基本原理 ...
- 部署Palworld幻兽帕鲁服务器最佳实践(Ubuntu)
本文为您介绍Ubuntu系统部署Palworld幻兽帕鲁服务器的最/佳实践. 1.登录云主机控制台,选择创建云主机的资源池,点击"创建云主机"按钮. 2.基础配置. CPU架构选择 ...
- 将VSCode设置为中文(汉化)
1.VSCode安装好后默认语言为英文,此汉化过程的VSCode版本为1.42.1,如下图所示: 2.下载安装完成后,打开VSCode,使用快捷键Ctrl+Shift+P,然后在出现的输入框中输入co ...
- jenkins+svn+tomcat
1.安装插件即可在源码管理中看见svn的选项subversion2.源码管理中配置svn的工程地址 3.点击Credentials的[添加]配置svn的用户名密码,完成后选取即可 4.配置构建触发器, ...
- 只需简单5步,Ansible脚本自动搭建AlwaysOn集群(已测试通过,可实际运行)
只需简单5步,Ansible脚本自动搭建AlwaysOn集群(已测试通过,可实际运行) 之前已经介绍过这套脚本,请看下面↓ 一分钟搞定!CentOS 7.9上用Ansible自动化部署SQL Serv ...