Java面试准备——Java集合

面试准备-Java集合 Java集合相关面试题 阅读详情

Java集合

本文学习自GitHub上的JavaGuide项目,感谢大佬的资源,此处为自我学习与整理,原项目链接 JavaGuide

List, Set, Map三者的区别?

  1. List(注重顺序):List接口存储一组有序的,可存在duplicate的对象。(可以有多个元素引用相同的对象)
  2. Set(注重独一无二):不存在duplicate,不允许重复的集合。
  3. Map(key索引):键值对存储,Map会维护与Key关联的Value,两个Key可以有相同的Value,但是Key是不能有duplicate的。

ArrayList与LinkedList

  1. 线程安全性:两者都不具备线程安全性,非同步。
  2. 底层数据结构:ArrayList底层使用Object数组,LinkedList底层使用双向链表。
  3. 插入的时间复杂度:因为ArrayList是数组,所以插入的时间复杂度和插入位置有关,LinkedList由于是链表,add(E e)方法时间复杂度近似为O(1),但是插入到具体位置需要遍历,时间复杂度近似为O(n)。
  4. 内存空间对比:ArrayList末尾会预留一部分的容量空间,造成空间浪费,LinkedList由于是双向链表,所以每一个元素占用的内存大于ArrayList。

ArrayList与Vector

最大的区别就是线程安全。Vector花费大量时间实现线程同步安全,所以在单线程建议使用ArrayList提高效率,考虑线程安全的情况下使用Vector。

HashSet如何检查重复

  1. 当新加入对象到HashSet中时,首先会计算对象的hashcode来判断插入位置。如果当前hashcode没有duplicate,则直接加入。如果已存在相同的hashcode值,则调用equals()方法来判断对象是否相等,如果相等,不加入,如果不相等,加入一个新的位置。
  2. hashCode()与equals():
    (1)如果两个对象equals,那么hashcode也相等
    (2)如果两个对象hashcode相同,并不一定equals
    (3)所以如果equals()被覆盖过,hashCode()也必须被覆盖
    (4)hashCode()默认计算对象在堆上的位置,如果没有重写hashCode(),就算两个对象引用同一数据也不会相等
  3. ==和equals():==比较的是基本数据类型的值或者对象的引用地址,而equals()比较的是对象的值。

HashMap和HashTable

  1. 线程安全:HashMap线程不安全,HashTable线程安全(内部方法都用synchronized修饰)。
  2. 效率:HashMap高于HashTable,HashTable事实上已被淘汰,想要保证线程安全用Java后期产生的ConcurrentHashMap。
  3. 对于空值的容忍性:HashMap可以接受Key为null,有且仅有一个,可以接受Value为null; HashTable不可以接受null值作为Key或者Value。
  4. 初始大小和扩容:HashTable默认初始化大小为11,之后每次扩容变为原先的2n+1;HashMap默认初始化大小为16,每次扩容为2n。如果给定初始大小,HashTable会使用给定的大小,HashMap则会扩充为2的n次幂,这取决于HashMap的TableSizeFor()方法。也就是说HashMap总会使用2的n次幂作为哈希表的大小。
  5. 底层数据结构:Java1.8以后HashMap在解决数据冲突时采用红黑树,当链表长度大于8时使用红黑树结构,使得搜索时间复杂度降低。而HashTable没有这种机制。

HashMap和HashSet

  1. 实现接口:HashMap实现Map接口,HashSet实现Set接口
  2. HashMap存储键值对,HashSet存储对象
  3. HashMap使用Key计算hashcode,HashSet使用成员对象计算hashcode,如果对象hashcode相等,再去判断equals()。

总结

List

  1. ArrayList:Object数组
  2. Vector:Object数组,支持线程安全,但是效率低
  3. LinkedList:双向链表

Set

  1. HashSet:无序,存储对象,唯一性,底层采用HashMap来保存元素
  2. LinkedHashSet:继承于HashSet,内部其实是通过LinkedHashMap实现的。笔者常用这个数据结构来对一组对象去重且排序,关于其内部原理并不是特别了解,只知道它可以对基本数据类型的一组数据进行排序同时去重。
  3. TreeSet:有序,唯一,红黑树(自平衡的排序二叉树)

Map

  1. HashMap:JDK1.8之前HashMap使用数组+链表的底层结构,1.8之后当链表长度大于8时使用红黑树来提高搜索效率。
  2. LinkedHashMap:继承自HashMap,底层也是数组+链表+红黑树,在HashMap的基础上增加了一条双链表,使得上面的结构可以保持键值对的插入顺序,同时通过对链表的相应操作实现了访问顺序的相关逻辑。
  3. TreeMap:红黑树,即自平衡的排序二叉树。
【保姆级教程】不到一元32位芯片 DIY迷你时钟 基于不到一元的CH32V003F4P9芯片制作的迷你多功能时钟。 阅读详情

相关推荐

【科研学习】Demo3D2015安装包以及图文安装步骤

安装包 点击下图的.exe文件,安装 不需要解压,打开注册机 如下图: 点击上图的.exe文件,出现下图 先点击 patch 打开安装目录下的Demo3D.licensing.dll文件,然后点击Generate,生成dvt-license文件,保存即可 打开安装完成的Demo3D 2015(64-bit),一般破解没完成的,会出现一个request a license 的问题,点击find license 的那一行 点击后找到自己Generate,生成dvt

KaelCui的博客 1万+

面试准备:Java基础--集合(List, Set, Map)

面试准备:Java基础--集合(List, Set, Map)Collection体系集合Collection接口List接口List实现类 -- ArrayListList实现类 -- VectorList实现类 -- LinkedListArrayList和LinkedList区别生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出

weixin_40745651的博客 387

【深度学习】基于BERT模型的情感分析(附实战完整代码+数据集)

情感分类是一个快速发展的研究领域,尽管众多模型和数据集在二分类任务中显示出很高的准确性,但细粒度的情感分类任务仍然是一个很大改进空间的领域。分析SST-5数据集,Munikar等人的先前工作表明,嵌入工具BERT允许使用简单的模型来实现最新的准确性。

aaaa_hsjsueu的博客 2万+

2020面试准备之Java集合

文章目录1、Java集合类框架的基本接口有哪些?2、Collection 和 Collections 有什么区别?3、为什么集合类接口没有实现 Cloneable 和 Serializable 接口?4、List、Set、Map 之间的区别是什么?5、什么是迭代器(Iterator)?6、Iterator 和 ListIterator 的区别是什么?7、快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?8、HashMap 和 Hashtable 有什么区别?9、为啥 Hashtab

Herishwater的博客 495

Python、Selenium实现问卷星自动填写(内含适配个人问卷的方法)

使用Python、Selenium实现问卷星自动填写,内含适配个人问卷的方法。

DaenCode的博客 3837

CAN 比特率和采样点计算

架构根据输入频率和比特率自动计算。

ldinvicible的专栏 787

Java面试准备之集合框架

集合框架 Collection:List列表,Set集 Map:Hashtable,HashMap,TreeMap Collection 是单列集合 List 元素是有序的(元素存取是有序)、可重复 有序的 collection,可以对列表中每个元素的插入位置进行精确地控制。可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。可存放重复元素,元素存取是有序的。 List接口中

bzt820801的博客 385

【ROS2】MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点

【ROS2】MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点

qq_44703886的博客 3621

JAVA面试准备01——JAVA集合

JAVA面试准备01——JAVA集合 1.接口继承关系和实现 集合类存放于Java.util包中,主要有3种:set(集)、list(列表包含Queue)和map(映射)。 Collection:Collection是集合List、Set、Queue的最基本的接口。 Iterator:迭代器,可以通过迭代器遍历集合中的数据 Map:是映射表的基础接口 2.List Java的List是非常常用的数据类型。List是有序的Collection。Java List一共三个实现类:分别是ArrayList、V

m0_49068745的博客 195

PCIe学习笔记(一)-------1.3 PCIe数据包(TLP,DLLP,PLP)

1,PCIe的层次结构 PICe设备在硬件电路上可以分为三个层次结构:事务层(Transaction Layer)、数据链路层(Data Link Layer)、物理层(Physical)。每一个层次又可以分为两个部分,分别为处理发送和处理接收的部分。 也可以分为四个层次,将事务层以上的层次称为软件层(Software Layer)。 2,PCIe数据包 前面已经说过PCIe之间是以数据包的形式来传输数据的,协议共定义了3类数据包。与处理层相关的是处理层数据包(TLP),与数据链路层相关的是数据

llxxyy507的博客 2万+

C++ 工程实践(9):数据抽象

陈硕 (giantchen_AT_gmail)http://blog.youkuaiyun.com/Solstice  http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.youkuaiyun.com/Solstice/category/8

陈硕的Blog 1万+

Java面试准备(二)——Java集合

Java集合框架图Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体系。集合中存的是对象的引用,而不是对象本身。eg:把同一个对象存在两个集合中,在一个集合中改变该对象的值,另一个集合中存的这个对象值也变了集合只能存引用数据类型,不能存基本数据类型先来看一下 接口下面的集合(List,Set,Queue)。再来看看 接

NA_imu的博客 790

数据分析项目:直播电商用户流失分析

其中,'Tenure'(在网时长)可能是影响用户流失的关键因素,意味着用户在平台上的停留时间越长,流失的可能性可能越低,这提示平台应注重提高用户粘性,增加用户在平台上的活跃度和停留时间。)的分析,挖掘用户流失的原因和模式,分析发现用户投诉处理效率(Complain)、距上次消费时长(DaySinceLastOrder)、会员生命周期(Tenure)等8项核心指标对流失预测贡献度达87%,模型准确率94.58%,并提出相应的建议。重视用户的满意度,及时处理用户的投诉和反馈,不断改进平台的服务和功能。

Nervousr的博客 2459

Java面试准备--集合、泛型

1.ArrayList和LinkedList的区别 Array(数组)是基于索引的数据结构,使用索引在数组中搜索和读取数据很快。但是要删除数据很慢,因为要重排数组中的所有数据。而且数组初始化时必须指定初始化的长度,否则报错。 List是一个有序的集合,可以包含重复元素,提供按索引访问的方式,继承的是Collection。List有两个实现类,就是ArrayList和LinkedList。 ArrayList可以看做是一个能够自动增长容量的数组,底层是Array,数组扩容实现。 而LinkedList是一个

weixin_44976835的博客 469

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

java面试准备之集合框架(java集合必知必会)

集合框架 Collection:List列表,Set集 Map:Hashtable,HashMap,TreeMap Collection 是单列集合 List 元素是有序的(元素存取是有序)、可重复 有序的 collection,可以对列表中每个元素的插入位置进行精确地控制。可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。可存放重复元素,元素存取是有序的。 List接口中常用类: Vector:线程安全,但速度慢,已被ArrayList替代。底层数据结构是数组结构ArrayL.

大厂经验交流地 431

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【面试准备】Java集合

HashEntry和HashMap结构类似,是一种数组和链表的结构,一个Segment包含一个HashEntry数组,HashEntry的元素是一个链表。通过对链表或红黑树的头节点进行加锁来保证线程安全,相比分段锁的粒度更小,只要没有哈希冲突就不会有并发问题。JDK 1.7扩容迁移时,使用的是头插法,原本链表为 A -> B,迁移后会变成 B -> A,如果有多个线程同时执行迁移,就有可能出现 B -> A -> B 的情况。未扩容,只声明了容量为10,在第一次添加数据时才会生成数组。

qq_39640089的博客 114

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java面试准备7-集合

集合

weixin_44321211的博客 686

Java面试准备-集合

问题链接转载  Java面试通关要点汇总集【终极版】 一、List 和 Set 区别 list和set是实现了collection接口的 List 可以有重复项 有序容器,按插入的顺序输出 常用的实现类有ArrayList,LinkedList和Vector Set 不能有重复项 无序容器,无法保证输出的顺序,TreeSet可以通过 Comparator  或者 Comparabl...

haima95的博客 168

Java 后端面试准备 Day 1:项目面试题、Redis、Java 集合与并发

<think>我们要求根据内容生成≤150字的文章摘要。内容很长,是关于Java后端面试准备第一天的记录,包括项目介绍、登录Session、Redis、集合、并发等。摘要要简洁,概括主要内容。注意字数限制。我们需要提炼核心:项目是StudyMate,技术栈,复习了登录、Session、Redis、集合、并发等,并整理项目面试题。可写成一段话。控制字数。</think>本日总结了Java后端面试准备,围绕StudyMate项目复习。涵盖项目介绍(Spring Boot + Vue3)、登录与Session机制

2303_79787780的博客 270

大数据开发面试准备——java集合

java集合面经

Xiao__Bei的博客 309

准备Java面试?java集合的继承体系

一面: 个人介绍加项目介绍20分钟 微服务架构是什么,它的优缺点? ACID CAP BASE理论 分布式一致性协议,二段、三段、TCC,优缺点 RPC过程 服务注册中心宕机了怎么办? 微服务还有其他什么组件 分布式架构与微服务的关系 你有什么问题要问我的? 二面: 各种排序算法、未排序常规数据查找第K大的数,时间复杂度。 二叉树的深度 虚拟内存分页了解不? 进程和线程区别? 第一二三范式是什么? 一个表一千个列值为true和false,写sq

m0_57541165的博客 83

Java集合面试题汇总资源下载:面试必备良药,助你Java集合知识一臂之力

Java集合面试题汇总资源下载:面试必备良药,助你Java集合知识一臂之力 【下载地址】Java集合面试题汇总资源下载 此项目为Java开发者提供了《Java集合面试题汇总.pdf》文件的下载资源,内容涵盖Java集合框架的常见面试题目及详细解答。无论是初学者还是经验丰富的开发者,都能从中获取有价值的面试准备资料,深入理...

gitblog_06757的博客 820

java基础面试准备--集合

一、集合与数组数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。二、各种集合的对比Vector和ArrayListvector是线程同步的,所以它也是线程安全的,而ArrayList是线程异步的,是不安全的。如果不考虑到线程的安全因素,一般用arraylist效率比较高...

java那些事儿 426

2024届java面试准备--集合篇

这些是面试中集合的相关知识是我)准备实习期间总结一些网上集合知识和自己被面试官询问到的一些知识点,供大家学习参考,有问题可私信我,后续会更新spring、线程、mysql、redis等相关知识点和面试易考点~~

fanhongliang02的博客 158

android面试 java,Android面试准备(第一弹:Java集合)

ArrayList、LinkedList、Vector区别ArrayList 是一个可改变大小的数组,其大小将会动态地增长。LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList,这些对比都是指数据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义。LinkedList 还实现了 Queue ...

weixin_42327743的博客 71
上一篇: Java面试准备——Java IO流
下一篇: Java面试准备——HashMap底层原理以及ConcurrentHashMap
Louis_Lyu
博客等级 码龄9年 9粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值