面试题-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 的,那没有看过的小伙伴快去补下啦,文末也都有链接:看过的小伙伴,那本文就是检测学习成果的时候啦 今天这篇文 ...
随机推荐
- 痞子衡嵌入式:Farewell, 我的写博故事2024
-- 题图:苏州周庄古镇双桥 2024 年的最后一天,照旧写个年终总结.今年工作上稳步发挥,但是在生活上收获了一个新的爱好,大家可能知道,痞子衡比较爱运动,一直有在打篮球羽毛球桌球.有感于公司乒乓球文 ...
- Redis 源码简洁剖析 01 - 环境配置
fork Redis 源码 在 GitHub 上找到并 fork Redis 源码 https://github.com/redis/redis,然后在本地 clone 自己 fork 出来的源码项目 ...
- [megatron代码阅读] 1. 初始化和组网
以pretrain_gpt.py为例, 看megatron的整体逻辑. 本章主要包括megatron初始化相关逻辑, 核心函数为initialize_megatron, setup_model_and ...
- Spring Boot进阶教程--注解大全
springboot注解大全 SpringBoot注解就是给代码打上标签的能力.通过引入注解,我们可以简单快速赋予代码生命力,大大提高代码可读性和扩展性.注解本身不具有任何能力,只是一个标签,但是我们 ...
- KeyDB-键值存储
KeyDB项目是从redis fork出来的分支.众所周知redis是一个单线程的kv内存存储系统,而KeyDB在100%兼容redis API的情况下将redis改造成多线程. 多线程架构 线程模型 ...
- biancheng-Spring
目录http://c.biancheng.net/spring/spring-abc.html 1Spring是什么2Spring体系结构3Spring开发环境搭建4第一个Spring程序5Sprin ...
- 从Linux零拷贝深入了解I/O
转载&学习文章:从Linux零拷贝深入了解I/O 本文将从文件传输场景以及零拷贝技术深究 Linux I/O 的发展过程.优化手段以及实际应用. 前言 存储器是计算机的核心部件之一,在完全理想 ...
- 面向对象(下)的阶段性复习:关键字abstract、模板方法的设计模式、关键字interface、代理模式、工厂的设计模式、类的结构内部类
关键字:abstract abstract: 抽象的1.可以用来修饰:类.方法2.具体的:abstract修饰类:抽象类 * > 此类不能实例化 * > 抽象类中一定有构造器,便于子类实例 ...
- Linux下安装jdk的两种方法
Linux下安装jdk的两种方式和安装mvn 有网的环境 yum方式下载安装1.查找java相关的列表 1 yum -y list java* 或者 1 yum search jdk 2.安装 ...
- Q:xml 需要转义的字符
XML实体中不允许出现"&","<",">"等特殊字符,否则XML语法检查时将出错,如果编写的XML文件必须包含这些字符 ...