Java集合部分面试题解答

Java集合面试题 52道 集合容器概述 什么是集合 集合就是一个放数据的容器,准确的说是放数据对象引用的容器 集合类存放的都是对象的引用,而不是对象的本身 集合类型主要有3种:set(集)、list(列表)和map(映射)。 集合的特点 集合的特点主要有如下两点: 集合用于存储对象的容器,对象是用来封装数据,对象多了也需要存储集中式管理。 和数组对比对象的大小不确定。因为集合是可变长度的。数组需要提前定义大小 集合和数组的区别 数组是固定长度的;集合可变长度的。 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数 阅读详情

1.Collection和Collections的区别

Collection是集合类的上级接口,继承与他有关的接口主要有List和Set

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作

2.Comparable 和 Comparator 接口是干什么的?列出它们的区别

Comparable 是排序接口。

若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排序,假设现在存在“实现Comparable接口的类的对象的List列表(或数组)”,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。

Comparator 是比较器接口。

我们若需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口);那么,我们可以建立一个“该类的比较器”来进行排序。这个“比较器”只需要实现Comparator接口即可。

需要注意:

  1. Comparable接口位于 java.lang包下,Comparator接口位于java.util包下。
  2. Comparable是需要比较的对象来实现接口。这样对象调用实现的方法来比较。对对象的耦合度高(需要改变对象的内部结构,破坏性大)。
    Comparator相当于一通用的比较工具类接口。需要定制一个比较类去实现它,重写里面的compare方法,方法的参数即是需要比较的对象。对象不用做任何改变。解耦。

3.数组 (Array) 和列表 (ArrayList) 有什么区别?什么时候应该使用 Array 而不是 ArrayList?

1、存储内容比较:
Array 数组可以包含基本类型和对象类型,
ArrayList 却只能包含对象类型。
Array 数组在存放的时候一定是同种类型的元素。ArrayList 就不一定了 。

2、空间大小比较:
Array 数组的空间大小是固定的,所以需要事前确定合适的空间大小。
ArrayList 的空间是动态增长的,而且,每次添加新的元素的时候都会检查内部数组的空间是否足够。

3.方法上的比较:
ArrayList 方法上比 Array 更多样化

使用时机:如果想要保存一些在整个程序运行期间都会存在而且不变的数据,我们可以将它们放进一个全局数组里, 但是如果我们单纯只是想要以数组的形式保存数据,而不对数据进行增加等操作,只是方便我们进行查找的话,那么,我们就选择 ArrayList。

4.Iterator 和 ListIterator 的区别是什么?

在这里插入图片描述

1.使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。

2.ListIterator有add方法,可以向List中添加对象,而Iterator不能。

3.ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。

4.ListIterator可以定位当前索引的位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

5.都可实现删除操作,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能修改

5.HashSet 和 TreeSet 有什么区别?

HashSet:
不能保证元素的排列顺序,顺序有可能发生变化
集合元素可以是null,但只能放入一个null
HashSet底层是采用HashMap实现的

TreeSet:
Treeset中的数据是排好序的,不允许放入null值。
TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key。
TreeSet的底层实现是采用二叉树(红-黑树)的数据结构。

【面试】Java高频面试题(2023最新版) int compareTo(String str) 会对照ASCII 码表 从第一个字母进行减法运算 返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果,如果连个字符串一摸一样 返回的就是0。String str="i"会将起分配到常量池中,常量池中没有重复的元素,如果常量池中存中i,就将i的地址赋给变量,如果没有就创建一个再赋给变量。String str=new String(“i”)会将对象分配到堆中,即使内存一样,还是会重新创建一个新的对象。 阅读详情

相关推荐

【JAVA 面试题总结】

ArrayList:基于数组实现,随机访问效率高(通过索引快速定位元素),增删元素尤其是中间元素时效率相对较低,线程不安全,适合查询操作多的场景。LinkedList:基于链表实现,增删元素(特别是在首尾位置操作)效率高,随机访问效率低,同样线程不安全,适合频繁增删操作的场景。Vector:和 ArrayList 类似,基于数组,但它是线程安全的(方法都加了 synchronized 关键字),不过性能相对较低,现在较少使用。

架构师之路 909

【Java集合框架面试题(30道)】

Java集合框架 List、Map、Set常见面试题目;重点时Map,包含HashMap结构、设计原理、红黑树、1.8新特性中的优化内容、put流程等面试知识梳理。

独上高楼,望尽天涯路。 9878

【面试】Java高频面试题(2024最新版)

int compareTo(String str) 会对照ASCII 码表 从第一个字母进行减法运算 返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果,如果连个字符串一摸一样 返回的就是0。String str="i"会将起分配到常量池中,常量池中没有重复的元素,如果常量池中存中i,就将i的地址赋给变量,如果没有就创建一个再赋给变量。String str=new String(“i”)会将对象分配到堆中,即使内存一样,还是会重新创建一个新的对象。

m0_67265654的博客 1323

Java常见集合(含2024最近面试题)

集合相关面试题

qq_48428343的博客 4280

【Java学习】Java基础部分高频面试题及详解

基于双向链表,插入/删除效率高(时间复杂度O(1)),但随机访问需遍历(时间复杂度O(n))213。链表长度≥8且桶数量≥64时,链表转红黑树(防止哈希碰撞攻击);:隐藏对象内部细节,通过方法暴露操作(如类的私有字段通过getter/setter访问)315。:基于动态数组,支持快速随机访问(时间复杂度O(1)),但插入/删除效率低(需移动元素)213。:只能有抽象方法(Java 8后允许默认方法)、常量;:提取共性特征形成类或接口(如抽象类定义通用方法,子类实现细节)315。接口定义线程任务)213。

meisongqing的博客 350

深圳Java面试题深度解析与综合指南

Java多线程编程是构建高效并发应用程序的关键。掌握线程创建、状态控制和同步机制对于编写可靠和高效的多线程代码至关重要。通过合理地使用关键字、Condition等工具,可以有效地解决并发中的资源竞争和协作问题。理解并应用死锁的预防策略,可以避免程序陷入僵局,从而提高程序的健壮性和稳定性。随着Java多线程技术的不断演进,例如通过包下的各种并发工具类,开发者可以更加灵活和高效地处理并发问题。

weixin_36204513的博客 845

常见JAVA集合面试题(自用整理,持续更新)

接口实现类线程安全替代方案特点适用场景ListArrayList非线程安全动态数组,查询快、增删慢,允许null元素单线程环境下的快速访问LinkedList非线程安全双向链表,增删快、查询慢,允许null元素频繁增删的单线程场景Vector线程安全(过时)动态数组,线程安全,性能低,已被替代遗留代码兼容Stack线程安全(过时)使用Deque实现(如 ArrayDeque)继承自 Vector,后进先出(LIFO)结构栈结构需求,但推荐使用DequeSet。

heguoqin123的博客 3781

跟着团子学SAP PS:BOM和项目结构的联动-BOM Transfer CN33

关于项目中的物料组件挂接你需要了解的一点功能

Lucas1211的博客 2万+

java面试题-集合篇

java集合相关面试题

qq_33129875的博客 3238

macOS向日葵闪退终极修复:权限设置与后台运行全解析

本文详细解析了macOS上向日葵远程控制软件闪退问题的根源与解决方案,重点介绍了权限设置与后台运行的优化方法。通过配置屏幕录制、辅助功能等关键权限,以及优化后台进程管理,有效解决闪退问题,提升远程控制软件的稳定性与使用体验。

fern8的博客 1765

VIVADO网表文件DCP和EDF

为了便于模块化设计,同时保护自己的知识产权,Xilinx VIVADO 提供两种代码封装方法:DCP文件和edf文件。

u014035968的博客 1万+

Java面试题汇总-集合篇+JUC篇

Hash 碰撞是指不同的数据通过哈希算法计算后得到相同的哈希值,映射到了哈希表的同一个位置,发生”碰撞”解决方案: 1.拉链法(链地址法): 将哈希表的每一个槽的位置变成一个链表,将哈希值相同的键存储到同一个链表中2.开放寻址法: 如果出现碰撞,就寻找哈希表下一个可用的位置. 3.再哈希法(双重哈希): 在出现碰撞时,使用第二个哈希函数计算新的索引位置, 减少碰撞的概率当一个共享资源被多个线程访问时进行保护的行为叫线程同步,让线程有序访问,目的是为了避免出现数据不一致等问题。延伸→如何保证线程同步?

csdn3043663729的博客 3311

抖音小游戏(IAA)巨量引擎投放指南

摘要:本文详细介绍了在巨量引擎平台投放小游戏广告的完整流程,包括五个关键步骤:1)添加小游戏资产,填写ID等信息并等待审核;2)添加事件管理,配置激活和关键行为事件;3)通过橙子建站创建落地页,设置跳转链接;4)新建广告项目,选择小程序推广目标;5)完成广告创建。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 4500

JAVA 企业面试题

JAVA 企业面试题

lwx666sl的博客 231

(四) OpenClaw-Skill技能全面了解和自定义技能

OpenClaw Skills是提升AI代理功能性的关键模块。本文系统介绍了Skills的核心概念、获取渠道和创建方法。Skills作为标准化指令集合,能让OpenClaw从单纯理解升级为实际执行任务,相比传统System Prompt具有模块化、可复用等优势。用户可通过Clawhub官方商店、GitHub社区等渠道获取5700+现成技能,或按需开发自定义Skill。文章详细演示了创建"Hello World"示例技能的完整流程,包括编写Python脚本、配置SKILL.md文件、部署。

直到世界的尽头 8296

第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门

vben5 快速入门。 Vben Admin 框架新出的版本V5.5.4,而之前的Vben Admin 2.x 目前已存档,仅进行重大问题修复。之前在2.x版本曾经简单完成了一版专栏文章,当时也是收获了一些好评和建议。本次决定在v5 版本基础上再完成一次前后端的搭建。希望大家继续多多支持。项目精简后,再次启动项目,执行 pnpm run dev点击登录,可以看到接口报错,现在前端请求的后端有报错,下一节处理这部分逻辑。

cuiwin的专栏 7073

java逻辑面试题_java学习必备——java逻辑推理面试题

int compareTo(String str) 会对照ASCII 码表 从第一个字母进行减法运算 返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果,如果连个字符串一摸一样 返回的就是0。String str="i"会将起分配到常量池中,常量池中没有重复的元素,如果常量池中存中i,就将i的地址赋给变量,如果没有就创建一个再赋给变量。String str=new String(“i”)会将对象分配到堆中,即使内存一样,还是会重新创建一个新的对象。

m0_67391377的博客 938

基于Simulink实现电动汽车电机驱动系统的建模与仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车电机驱动系统的建模与仿真。该系统能够全面评估电机驱动系统的性能,验证控制策略的有效性,并通过优化设计提高车辆的动力性和效率。引入智能预测:结合人工智能技术,实现更智能的控制策略。扩展功能:增加对多种电机类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

xiaoheshang_123的博客 317

Java Collection Framework 面试题

以下案例有什么问题?元素自身不具备比较性案例int id;set.add(new Person("马六",25));运行报错。首先,set添加元素的时候,是有比较的,因为它有排序,那么现在添加的是Person对象,对象怎么比较呢?对象不具备比较性(即上面说的元素自身不具备比较性),那么大家注意,对象虽然不具备比较性,对象里面的属性是否具备比较性呢?如果对象的属性具备比较性,让对象(Person)继承Comparable接口,并重写compareTo方法去比较属性是否可以呢?

weixin_46690498的博客 922

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【JavaEE初阶】 线程安全的集合类

原来的集合类, 大部分都不是线程安全的.Vector, Stack, HashTable, 是线程安全的(不建议用), 其他的集合类不是线程安全的.为什么不建议使用呢?因为我们在使用的时候,这些类就会自动的加锁,虽然编译器会自动优化为没有锁竞争的线程进行锁消除的优化,但是呢万一编译器没有优化好,就麻烦了所以我们更多的是搭配一下其他方案达到线程安全,比如以下几种。

m0_71731682的博客 2544

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JAVA经典面试题附答案(持续更新版)

前言:少年易老学难成,一寸光阴不可轻。未觉池塘春草梦,阶前梧叶已秋声。—朱熹《劝学诗》勤奋才是改变你命运的唯一捷径。

2401_89221867的博客 1501

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java经典面试题 带答案(三)_public class te1 {public static void main(string[]

学习视频:本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取/**反射工具类@author 骆昊通过反射取对象指定字段(属性)的值@param target 目标对象@param fieldName 字段的名字@throws 如果取不到对象指定字段的值则抛出异常@return 字段的值Class

2401_84584854的博客 787

java map排序_2019年Java面试题基础系列228道(3),快看看哪些你还不会?

2019年Java面试题基础系列228道第一篇更新1~20题的答案解析2019年Java面试题基础系列228道(1),快看看哪些你还不会?第二篇更新21~50题答案解析2019年Java面试题基础系列228道(2),快看看哪些你还不会?本次更新Java 面试题(一)的51~95题答案51、类 ExampleA 继承 Exception,类 ExampleB 继承ExampleA。有如下代码片断:t...

weixin_39915210的博客 195
上一篇: Java JSON解析简单教程
下一篇: Javaweb mvc设计模式与三层架构
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值