JAVA面试汇总(三)集合(一)

JAVA多线程七篇终于写完了,今天开始了新的JAVA面试汇总,集合部分,这部分其实比多线程有意思多了,这个计划最多五篇,也许不到五篇,这是第一篇,开卷。
1.Collection和Collections 的区别?

(1)Collection是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。List,Set,Queue接口都继承Collection。
(2)Collections是一个包装类。它包含有各种有关集合操作的静态方法(对集合的搜索、排序、线程安全化等),大多数方法都是用来处理线性表的。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;public class TestCollections {public static void main(String[] args) {ArrayList nums = new ArrayList();nums.add(100);nums.add(-80);nums.add(25);nums.add(91);nums.add(-1);System.out.println("集合是否为空:" + nums.isEmpty());System.out.println("默认顺序:" + nums);Collections.reverse(nums);System.out.println("反转后顺序:" + nums);Collections.sort(nums);System.out.println("排序后顺序:" + nums);Collections.shuffle(nums);System.out.println("混淆后顺序:" + nums);// 下面只是为了演示定制排序的用法,将int类型转成string进行比较Collections.sort(nums, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {String s1 = String.valueOf(o1);String s2 = String.valueOf(o2);return s1.compareTo(s2);}});System.out.println("指定排序后顺序:" + nums);System.out.println("最大的值是:" + Collections.max(nums));System.out.println("最小的值是:" + Collections.min(nums));}
}
//输出
集合是否为空:false
默认顺序:[100, -80, 25, 91, -1]
反转后顺序:[-1, 91, 25, -80, 100]
排序后顺序:[-80, -1, 25, 91, 100]
混淆后顺序:[91, 100, -80, 25, -1]
指定排序后顺序:[-1, -80, 100, 25, 91]
最大的值是:100
最小的值是:-80
2.修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法?

这个有些坑人,让你先入为主的以为用了equals方法,实际上用的key的hashCode方法,除非那这个对象A当key存的时候,才会用A的hashCode方法,equals方法只是针对比较是否相同时才使用,网上写的都是错的。具体来看看我写的测试

import lombok.Builder;import java.util.HashMap;
import java.util.Objects;public class EqualsTest {public static void main(String[] args) {HashMap map = new HashMap();Demo a = Demo.builder().a("aaa").build();Demo b = Demo.builder().a("bbb").build();map.put(a, "a");map.put(b, "b");map.put(b, "b");map.put("c", b);}@Builderstatic class Demo{public String a;public String b;@Overridepublic boolean equals(Object o) {System.out.println("Override equals");if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Demo demo = (Demo) o;return Objects.equals(a, demo.a);}@Overridepublic int hashCode() {System.out.println("Override hashCode");return Objects.hash(a);}}
}
//输出
Override hashCode
Override hashCode
Override hashCode
3.List,Set,Map的区别

(1)List和Set都是Collection的子类,所以这两个都实现了iterator接口(Collection),都可以使用迭代器遍历集合中的内容,而Map未继承Collection类。
(2)List可以存入重复的实体
(3)Set存入重复的实体则不会存入,是否重复如果是HashSet会针对hashCode方法的重写的比较是否相同,如果是TreeSet则会比较compareTo方法的重写比较大小排序
(4)Map是键值对形式,key,value。

4.List和Map的实现方式以及存储方式

(1)List中常用实现方式有ArrayList和LinkedList,ArrayList的存储方式是数组,查询快;LinkedList的存储方式是链表,插入、删除快。
(2)Set常用实现方式有HashSet和TreeSet,HashSet的存储方式是hashCode算法存储的数组,加入的对象需要实现hashCode方法,快速查找元素;TreeSet的存储方式是按顺序序存储的二叉树,需要实现Comparable接口来比较大小来排序
(3)Map常用实现方式有HashMap和TreeMap,HashMap的存储方式是通过hashCode算法存储的数组,当存入的数据达到一定程度会转换为红黑树(目前不了解,等我后边研究的),快速查找键值;TreeMap存储方式是对key值按顺序存储的红黑树,类似于TreeSet同样要实现Comparable接口来比较大小来排。

5.LinkedList实现原理

(1)通过双向链表实现的,内部存储了链表头/链表尾的节点以及存储节点的个数
(2)get(int index)判断index是在前半部分还是后半部分,前半部分从链表头开始遍历直到index位置,后半部分则从链表尾向前开始遍历直到index。
(3)set(int index, E element)同样是先查找到index的节点,替换掉
(4)add(int index, E element)同样是先查找到index的节点,在这个节点后边添加一个节点,如果原位置后边有节点,则将原位置后边的节点添加到新添加的节点的后边。
(5)remove其实一样先index节点,然后将他的前一个节点的指向当前节点的位置设置为null。

感谢各位的阅读,帮忙点赞,感谢各位。
最后编辑于:2024-12-09 22:11:28


喜欢的朋友记得点赞、收藏、关注哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/488421.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 ASP.NET Core HttpLoggingMiddleware 记录 http 请求/响应

我们发布了一个应用程序,该应用程序运行在一个相当隐蔽的 WAF 后面。他们向我们保证,他们的产品不会以任何方式干扰我们的应用程序。这是错误的。他们删除了我们几乎所有的“自定义”标头。为了“证明”这一点,我构建了一个中间件&#xff0c…

qt 封装 调用 dll

这个目录下 ,第一个收藏的这个 ,可以用, 但是有几个地方要注意 第一.需要将dll的头文件添加到qt的文件夹里面 第二,需要在pro文件里面添加动态库路径 第三,如果调用dll失败,那么大概需要将dll文件放在e…

基于自注意力网络的SASRec

运用了自注意力网络(self-attention network,SAN)的序列推荐算法(SASRec)能以并行化的方式捕捉同一序列上不同时间步间的转移关系,最后通过加权求和的方式得出每个时间步的序列特征。 算法原理:…

从一个Bug谈前端响应拦截器的应用

一、问题场景 今天在开发商品管理系统时,遇到了一个有趣的问题:当添加重复的商品编号时,页面同时弹出了两条 "商品编号已存在" 错误提示: 这个问题暴露了前端错误处理机制的混乱,让我们从这个问题出发&…

【机器学习chp9】集成学习

一、集成学习的概念 1. 什么是集成学习 定义:集成学习是一种通过组合多个模型(称为基学习器)来提升整体系统性能的方法。优点: 单个模型性能可能已经优化到极限,难以进一步提高,集成学习通过少量额外工作…

复合机器人整体解决方案

复合机器人是一种集成移动机器人和协作机器人两项功能为一身的新型机器人,更符合人们想象中“脑、眼、手、脚”融合的机器人终极形态。复合机器人的整体解决方案通常涉及多个方面,包括机器人本体、控制系统、感知系统、执行系统以及周边配套设备等。以下…

SpringBoot【十】mybatis之xml映射文件>、<=等特殊符号写法!

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 在利用mybatis进行开发的时候&#xff0c;编写sql时可能少不了>、<等比较符号&#xff0c;但是在mapper映射文件中直接使用是不行的&#xff0c;会报错&#xff0…

Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索

在之前的文章 “Elasticsearch 开放推理 API 新增阿里云 AI 搜索支持”&#xff0c;它详细描述了如何使用 Elastic inference API 来针对阿里的密集向量模型&#xff0c;稀疏向量模型&#xff0c; 重新排名及 completion 进行展示。在那篇文章里&#xff0c;它使用了很多的英文…

windows下Qt5自动编译配置QtMqtt环境(11)

文章目录 [toc]1、概述2、准备1.1 下载源码1.2 配置环境1.3 解释原理 3、编译4、验证5、参考6、视频 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt网络编程 &#x1f448; 1、概述 Qt默认是不包含mqtt库的&#xff0c;如果需要使用到mqtt库就只能自己编译配…

关于OpenAI Sora上线!AI视频生成的新纪元

OpenAI Sora的上线无疑是人工智能领域的一个重要进展&#xff0c;它标志着AI技术在视频生成和编辑方面迈出了一大步。 引言 在人工智能的快速发展中&#xff0c;OpenAI的最新力作——Sora&#xff0c;标志着AI视频生成技术的一个新纪元。Sora的上线不仅是技术上的一次飞跃&am…

K8S对接ceph的RBD块存储

1 PG数量限制问题 1.1 原因分析 1.还是老样子&#xff0c;先创建存储池&#xff0c;在初始化为rbd。 [rootceph141~]# ceph osd pool create wenzhiyong-k8s 128 128 Error ERANGE: pg_num 128 size 3 for this pool would result in 295 cumulative PGs per OSD (2067 tot…

Windows11安装Isaac Lab

1.1 下载文件 将 Isaac Lab 仓库克隆到您的工作空间&#xff1a; git clone https://github.com/isaac-sim/IsaacLab.git 1.2 创建Isaac Sim符号链接 F:cd IsaacLab 官方文档里路径/有问题&#xff0c;改成\&#xff09;&#xff1a; # 打开IsaacLab目录cd IsaacLab# 使用…

NES游戏机项目制作笔记(未完成)

24年12月1日晚记——在网上找项目学习的时候发现一个有意思的项目&#xff0c;准备靠这个应用一些STM32的高级功能。值得提醒的是——目的在于学习不可贪杯&#xff0c;注意效率 01 根据项目需求分析 为确保充分考虑每一个细节&#xff0c;并且让自己高效的完成项目制作&#…

ElasticSearch - 理解doc Values与Inverted Index倒排索引

文章目录 概述倒排索引&#xff1a;从图书馆的索引卡片谈起倒排索引的工作原理 docValues&#xff1a;从数据库的列式存储说起docValues的工作原理 docValues与倒排索引的对比两者的联系&#xff1a;组合使用&#xff0c;优化搜索与分析 小结 概述 在使用 Elasticsearch 进行大…

前端H5移动端基础框架模板 :Vue3 + Vite5 + Pinia + Vant4 + Sass + 附源码

技术栈选用 Vue3 Vite5 Pinia Vant4 Sass 源码地址&#xff1a; git clone https://gitee.com/gaiya001/h5-APP.git1. 1.vite.config.js文件配置 ** import { defineConfig } from vite // 导入 Vite 的配置函数 import vue from vitejs/plugin-vue // 导入 Vue 插件 i…

游戏引擎学习第36天

仓库 :https://gitee.com/mrxiao_com/2d_game 回顾之前的内容 在这个程序中&#xff0c;目标是通过手动编写代码来从头开始制作一个完整的游戏。整个过程不使用任何库或现成的游戏引擎&#xff0c;这样做的目的是为了能够全面了解游戏执行的每一个细节。开发过程中&#xff0…

C++小碗菜之五:GDB调试工具

“程序员不是编写代码的人&#xff0c;而是调试错误的人。” – 约翰本尼斯&#xff08;John Bennet&#xff09; 目录 前言 在虚拟机中安装 GDB GDB调试的实战演练 创建示例代码 例子&#xff1a; 使用 GDB 调试 编译代码 启动 GDB 设置断点 运行程序 打印变量值 …

【软件测试面试题】测试理论/基础面试(持续更新)

Hi&#xff0c;大家好。最近很多朋友都在说今年的互联网行情不好&#xff0c;面试很难&#xff0c;不知道怎么复习&#xff0c;我最近总结了一份在软件测试面试中比较常见的测试理论/基础面试面试题合集&#xff0c;希望对大家有帮助。建议点赞收藏再阅读&#xff0c;防止丢失&…

(css)element中el-select下拉框整体样式修改

(css)element中el-select下拉框整体样式修改 重点代码&#xff08;颜色可行修改&#xff09; // 修改input默认值颜色 兼容其它主流浏览器 /deep/ input::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.50); } /deep/ input::-moz-input-placeholder {color: rgba…

十一、容器化 vs 虚拟化-Docker

文章目录 前言一、Docker 介绍1. 简介2. 应用场景3. 特点4. Docker和虚拟机之间的区别5. 解决痛点1. 解决依赖兼容2. 解决操作系统环境差异3. 小结 二、Docker 架构三、工作流程五、Docker 核心组件及其工作机制1. Docker 客户端&#xff08;Docker Client&#xff09;2. Docke…