面试官问道:关于java集合类你都搞懂了吗?学会怒怼面试官!

Java面试篇基础部分-Java中的集合类 Java集合是面试中经常被问到的一块内容,很多人在这个地方被面试官吊打。Java集合类被定义在java.util包中,主要有四种集合,分别是List、Queue、Set和Map,每种集合分类如下图所示。 阅读详情

在这里插入图片描述

Java集合

集合类:提供一种存储空间可变的存储模型

Collection

  • 多态方式创建
  • 具体实现类为ArrayList
package javaee.List;

import java.util.ArrayList;
import java.util.Collection;

public class Collection_demo {
	public static void main(String[] args) {
		Collection<String> c = new ArrayList<>();

		c.add("java");
		c.add("hello");
		c.add("world");
		c.add("java");

		// 该集合中可以有重复元素
		System.out.println(c);
		//输出 [java, hello, world, java]

		System.out.println(c.remove("java"));
		//移除集合中的内容,若有多个则移除第一个元素
		//会返回一个布尔值

		System.out.println(c);
		// [hello, world, java]

		System.out.println(c.size());
		//返回集合中元素的个数 3

		c.clear();
		//清空集合中元素 
		//void类型

	}

}

迭代器(集合专用遍历方式)

package javaee.List;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Collection_demo {
	public static void main(String[] args) {
		Collection<String> c = new ArrayList<>();

		c.add("java");
		c.add("hello");
		c.add("world");
		c.add("java");

		//Iterator读取集合中内容
		Iterator<String> t = c.iterator();
		while(t.hasNext()) {
			System.out.println("数据为:"+ t.next());
		}		
	}
}

list

  • void add(int index , E element) 添加

    • 添加内容的索引号不可超过现有集合的个数
  • E remove()

  • E set(int index , E element) 修改指定索引内容

  • E get(int index) 得到指定内容

并发修改异常

如下面的代码,看似正常,但是会报一个ConcurrentModificationException的错误,这是因为了迭代器获取元素中判断预期修改值和实际修改值不一致,想要实现该功能,需要使用for循环来做。

//遍历集合,得到每一个元素,看有没有"world"这个元素,如果有的话,就添加一个"javaee"元素// 
Iterator<String> it = list.iterator(); 
while (it.hasNext()) { 
	String s = it.next(); 
	if(s.equals("world")) { 
    	list.add("javaee"); 
    } 
}

for(int i = 0;i<list.size();i++){
	String s = list.get(i);
	if(s.equel("world")){
		list.add("javaee");
	}
}

列表迭代器

通过list集合listIterator()方法得到

可沿任意方向遍历列表,迭代期间修改列表,并获取列表中迭代器的当前位置
列表迭代器有add方法,而iterator没有

		ListIterator<String> listl = l1.listIterator();
		while(listl.hasNext()) {
			String s = listl.next();
			if(s.equals("mc")) {
				listl.add("qq");
			}
		}
		//列表迭代器中会随时修改当前的修改次数,所以可以这样子修改

增强for

内部原理为一个迭代器

list集合子类

ArrayList:底层数组,查询快,增删慢
LinkedList: 底层链表,查询慢,增删快

set

  • 不包含重复元素
  • 没有带索引方法,不可使用增强for循环遍历
Set<String> set = new HashSet<>();
set.add("hello");
set.add("hello");
set.add("java");

for(String s : set) {
System.out.println(s);
}

哈希值

  • JDK根据对象的地址或字符串或数字算出来的int类型的数值
  • hashCode()获取
  • 注意 同一个对象多次调用hashCode()方法返回的哈希值是相同的

HashSet

  • 底层是哈希表
  • 对迭代出的数据顺序不做保证
  • 无重复
  • 默认初始容量16
HashSet<String> hs = new HashSet<>();

  • 在对一个对象进行存储时,需要重写它的hashcode和equals方法,以实现哈希表无重复的特点

哈希表

按照哈希值进行排放,哈希值对存储容量取余得到位置,若取余值相同时,则判断是否是相同的存放内容

LinkedHashSet

  • 由链表和哈希表实现
  • 元素有序且唯一

TreeSet

  • 元素有序,会以默认方式排序或以TreeSet(Comparator comparator)排序

  • 不含重复元素

  • 使用Comparator时,需要先在使用的类中实现comparable接口,然后才可以实现comparator方法
    ++ 返回0表示相同

//在类里面重写方法
@Override
	public int compareTo(student o) {
		// TODO Auto-generated method stub
		//return 0;

        // 如果都返回0,那么只能存储一个,因为它返回0默认后面的对象都一样

        //return 1;

        //按输入的顺序输出,返回一个整数,认为比之前一个大

        //return -1;

        //逆序

        int num = this.age-o.age;

        //比较年龄,按照升序

        int num1=num==0?this.name.compareTo(o.name):num;

        //年龄相同,比较姓名

        return num1;
	}

Map

键值对,Interface Map<K,V> K:键的类型 V:值的类型

public class map_demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, String> mp = new HashMap<String, String>();
		mp.put("01", "kik");
		mp.put("02", "兰陵");
		mp.put("03", "亚瑟士");

		System.out.println(mp);

		System.out.println(mp.get("02"));

//		mp.containsKey(key);
//		mp.containsValue(value);
//		得到是否包含键和值 
//		mp.isEmpty判断是否为空
	}
}

遍历

	//方法一
	//获取所有键的集合
    Set<String> keyset = mp.keySet();
    for(String s : keyset) {
    System.out.println(mp.get(s));
    }

	//方法二
	//获取map
	Set<Map.Entry<String, String>> entrySet = mp.entrySet();
    for(Map.Entry<String, String> me : entrySet) {
        String key = me.getKey();
        String value = me.getValue();
        System.out.println(key +"++"+value);
    }

Collection

Collection.sort()排序
Collection.reverse()反转
Collection.shuffle()使用默认随机源随机排列指定列表

分类:java基础

标签:java集合
在这里插入图片描述

程序员面试阿里,嫌弃面试官装逼当场怒怼,“把我的简历还给我”,疑似被拉黑 好家伙,金九银十一到,这奇葩事可真是多,前两天和粉丝聊天,他说前段时间面安阿里的Android岗,最后和面试官干起来了。 我问他为什么,他说没啥,就觉得面试官太装B了,一个破Framework问了我俩小时。 你说问Framework干啥?我平时又用不到这些东西!多问问组件、项目经验、应用层面不行么?就爱问这种虚而不实的东西,显得自己牛逼,公司牛逼! 开始还好,就正常问一些小问题,但是越来问得我越深,实在觉得烦了,就怼了几句,我说你简历给我吧,不面了。 说心里话,感觉就是纯纯虐着我玩呢,在我这找存在感呢。。。 阅读详情

相关推荐

集合类在 Java 面试题中的常见考点与解答技巧!

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛

喵手的博客 1125

员工去面试等了2小时后怒怼HR:通过了也不会入职,结果蒙了!

点击上方 "程序员小乐"关注,星标或置顶一起成长每天凌晨00点00分,第一时间与你相约每日英文Your dream is not what you find in y...

程序员小乐 1498

Cadence 17.2 OrCAD原理图库实战:从零创建电阻/电容/LED元件(附封装技巧)

本文以Cadence 17.2 OrCAD为核心,详细讲解了如何从零开始工程化地创建电阻、电容、LED等原理图库元件。内容涵盖库架构设计、符号绘制、引脚属性管理、封装关联技巧以及设计规则检查,旨在帮助硬件工程师构建规范、可复用且易于维护的元件库,为高效PCB设计奠定坚实基础。

weixin_29195615的博客 402

Java原来还可以这么学:如何搞定面试中必考的集合类

原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 系列文章介绍 本文是《五分钟学Java》系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年多的Java学习和工作经历,总结和沉淀下来的方法论,希望能让Java学习这件事变得更简单,作者目前在阿里做Java,忙里偷闲分享一些技术文章. 系列文章将会把一些技术学习方法、过程、要领与我的学习经验相结合,更...

Java技术江湖 1502

Qt实战:用QTreeView+QStandardItemModel实现多级多列文件浏览器(附完整代码)

本文深入探讨了使用Qt的QTreeView与QStandardItemModel构建多级多列文件浏览器的完整实践。通过分析模型/视图框架的优势,详细演示了从基础框架搭建、模拟数据填充,到对接真实文件系统实现懒加载的全过程。文章还涵盖了自定义委托、多列排序、右键菜单等高级定制技巧,并提供了性能优化建议和完整的代码示例,帮助开发者打造功能强大且高效的工业级文件管理界面。

weixin_29021291的博客 424

阿里巴巴达摩院人工智能训练师(高级)

阿里巴巴达摩院人工智能训练师(高级)

huang0612123的博客 1万+

面试官你想问什么

面试

Andy的java博客 654

Cadence笔记--原理图导入PCB

根据PCB尺寸画PCB外观尺寸,这里注意X\Y不能超过指定的区域,X\Y的最大值在setuo的grids里设置,画完后保存并关闭工程然后重新打开(不理解为何)由于只画了一个PMU6050,所以这里只有一个器件。工程选择board,选择存储路径和名称。6、重新网格导入,保证网表导入无误;注意网表保存的路径。

weixin_51418325的博客 1966

阿里二面被问Java ThreadPool线程池,看完这篇,一招怒怼面试官

线程池的优势 线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出的线程排队等候,等待其他线程执行完毕,再从队列中取出任务来执行 线程池的特点 线程复用、控制最大并发数、管理线程 降低资源消耗。重复利用已创建的线程,降低创建和销毁线程的开销 提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立刻执行 提高...

xingduan5153的博客 783

2025华为OD机试真题目录汇总 B+C+D+E卷(570道)(Python语言)

本文是华为OD机试真题(Python 语言)专栏的目录贴(持续更新中…)华为OD是Outsourcing Dispacth模式,是华为和外企德科联合招聘的简称。目前华为大多数是OD招聘。OD模式也是华为提出的一种新的用工形式,每年都会从OD项目挑优秀员工转为正编。所有OD和正式员工一样对待,没有差别,部门平时开会、评审等活动都是一起参加的,是同薪同酬,都是由华为的HR直接定的薪资,看的是我们技术能力。华为是大企业,能到华为上班也是有能力的,每个部门都有好多职位,是金子,在哪都会发光。

KJ.JK 18万+

黑猫带你学UFS协议第13篇:UFS初始化详解(Boot Operation)

本文详细解析了UFS设备的初始化过程,包括部分初始化、加载启动代码(可选)和初始化完成三个阶段。重点介绍了如何通过设备描述符和逻辑单元描述符配置引导特性,以及如何从UFS设备加载启动代码。内容适用于嵌入式硬件和存储领域的开发者。

黑猫奥利奥的博客 3555

Java面试官怒怼水货程序员:从Spring Boot到Kafka,你到底会不会?

本文以一场生动的Java面试对话,引出Spring Boot自动配置、高并发缓存策略、微服务消息通信三大核心问题,并给出详细的技术解析,帮助求职者深入理解技术背后的业务场景。

qq_63988225的博客 684

【即插即用模块】Transformer篇 | ICCV 2025 | MALA :注意力分布神似Softmax,告别线性注意力性能短板!

MALA(Magnitude-Aware Linear Attention)是一种改进的线性注意力机制,通过引入缩放因子和偏移项,解决了传统线性注意力忽视查询幅度的问题,使其分布更接近Softmax Attention。该模块具有线性复杂度(O(n)),结合RoPE和LEPE编码实现全局-局部位置信息混合,通过z值调制平衡信息权重。实验表明MALA在轻量级视觉任务中能有效平衡效率与精度,注意力可视化显示其分布与Softmax Attention高度相似。代码提供完整的RoPE位置编码和线性注意力

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1108

【怒怼大厂面试官】Kafka消费者手动提交、自动提交的区别?

各位牛爷爷,求解答。自我介绍项目,java基础,java集合,计网,设计模式,spring,springmvc,springboot,开发工具,构建工具,mysql问了整整50分钟。又稍微改了下简历,感觉个人职责部分实在不知道怎么扩充了,不知道这样行不行,求各位大佬拷打一下投了几家银行都还在简历筛选,3.13投了字节在筛选,15投了科大讯飞。投了天美2周没收到面试,其他后端的同学最多都被腾讯挂四次了,我还在苦苦的等[牛泪]感觉是天美的问题,隔壁光子魔方都发公众号招聘了,天美是一点动静都没。

2301_78234743的博客 1332

AEJoy —— 最受欢迎的 5 个 Ae 表达方式

NOTE] 原文作者我意识到表达式可能令人生畏,有些人宁愿复制粘贴有用的代码,而不愿学习这门语言。对此我完全理解。因此,我想与您分享我的。这些是我几乎在每个项目中都会使用的表达式,我认为它们极大地提升了工作流程。

ShaderJoy 的兴趣技术杂货铺 366

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java面试官怒怼水货程序员:连Spring Cloud都讲不清,回家等通知吧!

大家好,我是你们的面试官老K。今天又来了一位候选人,名叫谢飞机。看他的简历,技术栈写得天花乱坠,从Java SE到Web3.0,无所不包。但实际水平如何,咱们一问便知。

Fuze1111的博客 363

NTscan扫描工具

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

面试阿里露馅被怼了!面试官:这简历一看就是包装过的

点击上方“程序IT圈”,选择“星标”开发者技术前线 出品编辑 :可可 整理互联网求职简历包装一直是个受争议的话题。最近某后端开发面试阿里巴巴被怼了,原因是简历被面试官发现了可疑之出,被怼...

程序IT圈 978

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

京东二面被问关于Java类的生命周期,看完这篇,一招怒怼面试官!

京东二面被问关于Java类的生命周期,看完这篇,一招怒怼面试官!Java类的生命周期知识前提类的生命周期加载(Loading)连接(Linking)初始化(Initialization)使用(Using)卸载((Unloading) Java类的生命周期 类的生命周期?对象的生命周期?Spring bean 的生命周期?很多同学可能在学习java基础知识之初,很容易把这几个搞混。本文先来说说Java类的生命周期。 知识前提 在了解类的生命周期之前,有必要先了解一下jvm的内存结构。如下所示: 在了.

Delilah_java的博客 455

【怒怼大厂面试官】精通MySQL?考考你MySQL主从复制

真的要找个好公司啊,看到这个话题,我可太有发言权了,我就在普源精电实习,做的是销售工程师岗位。## 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可## # @param。一面是hr面,问的内容和别的帖子差不多,大致都是那些题库。途游游戏,科锐国际(计算机类),快手,CVTE,得物,蓝禾,奇安信,顺丰,康冠科技,金证科技24春招。20分钟,HR和技术负责人一起,主要针对简历和项目。本科以前的职业生涯都没有规划好,浑浑噩噩的过完了,研究生我想夺回失去的一切,呜呜呜。

2301_79125642的博客 1260
上一篇: 面试官直接说:java数据类型你都搞不懂的吗?我直接怒怼!
下一篇: 关于服务连接器Servlet搞懂了吗?看完!你一定会有收获!
Danny_java
博客等级 码龄5年 9粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值