首页 > 编程语言 >每天5道Java面试题(第10天)

每天5道Java面试题(第10天)

时间:2023-11-12 21:01:36浏览次数:53  
标签:10 面试题 Java HashMap HashSet ArrayList value key LinkedList

1. 自己实现一个HashMap?

HashMap的实现思路:

1,利用key的hashCode计算当前对象在数组中的下标。

2,存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同,覆盖原始值;(2)如果key不同(出现冲突),则将当前key-value放入链表中

3,获取值时,直接找到对应hash值对应的下标,再进行判断key是否相同,从而找到对应的value

源码实现参考:

https://blog.csdn.net/qq_34383019/article/details/100549644

2. 如何把Map和json之间互相转换?

json转换的时候通常使用fastJson或者Jackson工具类。

①使用Jackson ObjectMapper从JSON字符串读取Java Map的示例:

String jsonObject = "{\"brand\":\"ford\", \"doors\":5}";

ObjectMapper objectMapper = new ObjectMapper();

Map<String, Object> jsonMap =

 objectMapper.readValue(jsonObject,  new TypeReference<Map<String,Object>>(){});

②java对象转json: 

String json = objectMapper.writeValueAsString(map);

3. 说一下

HashSet实际上是一个HashMap实例,都是一个存放链表的数组。它不保证存储元素的迭代顺序;此类允许使用null元素。

HashSet中不允许有重复元素,这是因为HashSet是基于HashMap实现的,HashSet中的元素都存放在HashMap的key上面,而value中的值都是统一的一个固定对象private static final Object PRESENT = new Object();

HashSet中add方法调用的是底层HashMap中的put()方法,而如果是在HashMap中调用put,首先会判断key是否存在,如果key存在则修改value值,如果key不存在这插入这个key-value。而在set中,因为value值没有用,也就不存在修改value值的说法,因此往HashSet中添加元素,首先判断元素(也就是key)是否存在,如果不存在这插入,如果存在着不插入,这样HashSet中就不存在重复值。

 所以判断key是否存在就要重写元素的类的equals()和hashCode()方法,当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,计算次对象的哈希值,此哈希值决定了此对象在Set中存放的位置;若此位置没有被存储对象则直接存储,若已有对象则通过对象所在类的equals()比较两个对象是否相同,相同则不能被添加。

4. ArrayList 和 LinkedList 的区别是什么?

数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。

随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。

增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。

综合来说,在需要频繁读取集合中的元素时,更推荐使用ArrayList,而在插入和删除操作较多时,更推荐使用LinkedList。

5. 如何实现数组和List之间的转换?

数组转List使用 Arrays. asList(array) 进行转换。

List 转数组:使用 List 自带的 toArray() 方法。

标签:10,面试题,Java,HashMap,HashSet,ArrayList,value,key,LinkedList
From: https://blog.51cto.com/kongxiaolong/8330905

相关文章

  • 解决javax.persistence.RollbackException: Transaction marked as rollbackOnly Ask
    解决javax.persistence.RollbackException:TransactionmarkedasrollbackOnlyAsk在使用JavaPersistenceAPI(JPA)进行对象关系映射(ORM)的Java企业应用中,经常会遇到javax.persistence.RollbackException异常,其中的错误信息为"TransactionmarkedasrollbackOnly"。这......
  • JavaScript复习——04 事件
    事件对象事件对象是由浏览器在外面触发事件的时候创建的,这个对象封装了各种事件相关的各种信息例如:鼠标的位置键盘的按键浏览器创建事件对象后,会将事件对象作为响应参数传递在DOM类型中有多种不同类型的事件对象,但是他们都一个祖先Eventevent.clientX:获取鼠标的X轴坐标......
  • 龙芯发布 .NET 8 SDK 8.0.100-rc2 LoongArch64
    随着.NET8的发布的临近,国内的社区朋友们也很关心龙芯.NET团队对于Loongarch.NET8的发布时间,目前从龙芯.NET编译器团队的可靠信息,Loongarch.NET8的发布会在2023年11月14日正式发布后也会发布,从龙芯2019年启动.NET的研发工作,2022年完成了LoongArch64架构代码合并到.NET社区......
  • 2023.11.10测试
    \[\text{NOIP模拟赛-2023.11.10}\]T1进步科学一棵以\(1\)为根的\(n\)个点的树,初始时所有点的点权都是\(0\),每个点有期望的点权(\(0\)或\(1\))。每次操作可以选择一个点\(i\)变化它的点权,这个操作效果会在一秒后传给它的父亲,在\(j\)秒后传给它的\(j\)级祖先。特别的,......
  • 11.9~10
    上午就上了节化学就来机房了,试图用一种新的方式敲扫描线,然后失败,滚去做P1502窗口的星星了DZ别再直接把我一包纸拿走去上厕所了╰(‵□′)╯贺题解ing下午发现我的方法好像才是很新的方法,然而这道题好像和板子不太一样?反正没看到有我那种写法,恼了看着题解改一天了,都怀疑是我......
  • KubeSphere 社区双周报 | KubeSphere 3.4.1 发布 | 2023.10.27-11.09
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.10.27-2023.11.09。贡献者名单新晋KubeSphereCon......
  • 10.和为k的子数组
    题目概述:给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的子数组的个数。子数组是数组中元素的连续非空序列解题思路:先进行前缀和处理,再暴力枚举每个子数组,并判断其和是否为k时间复杂度:\(O(n^2)\)代码:classSolution{publicintsubarraySum(int......
  • 20211105李宜时思考题1
    FullIdent方案是一种身份认证和密码协议的方案,其解密过程验证的步骤通常包括以下几个阶段:收集信息:在这一步,收集必要的信息,比如用户的身份信息和相关的密钥。密钥协商:这一步涉及到用户端和服务器端的密钥协商。这通常包括了用户的私钥和服务器的公钥。验证用户身份:......
  • Java登陆第五天——SQL之DQL(三)
    子查询子查询就是在where中再嵌套一个查询SQL,可以理解为Java中方法的返回值。--甚至可以套中套无限套--被查询出来的表根据结果分为:单行子查询和多行子查询select列名from表名where( 另一个select语句 );准备数据--创建PersoncreatetablePerson(idint,......
  • Java中的HttpServletRequest
    Request:请求HttpServletRequest请求是获取请求行、请求头和请求体;可以通过这个方法设置防盗链,获取地址。牢记解决乱码的方式。怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此......