当前位置: 首页 > news >正文

【面试宝典】Java基础 这个面试题整理的不全 后期会进行补充

一、equals 和 hashcode

1、简述 hashCode()equals(Object obj) 的作用及其关系

hashCode() 方法用于获取对象的哈希码,即一个整数。这个哈希码在基于哈希的集合(如HashSet、HashMap等)中用于确定对象的存储位置。

equals(Object obj) 方法用于比较两个对象是否相等。默认情况下,它比较的是对象的引用地址;但在自定义类中,通常会重写该方法以比较对象的内容。

这两个方法之间的关系是:如果两个对象通过 equals(Object obj) 方法比较是相等的,那么调用这两个对象中任一对象的 hashCode() 方法必须产生相同的整数结果。这是Java集合框架正常工作的基本要求。

2、为什么要在自定义类中同时重写 hashCode()equals(Object obj) 方法?

如果只重写 equals(Object obj) 方法而不重写 hashCode() 方法,那么在基于哈希的集合中,即使两个对象通过 equals(Object obj) 方法比较是相等的,但由于它们的哈希码不同,这些集合也可能无法正确地处理它们(如无法正确去重)。

因此,为了保证自定义对象在Java集合框架中的正确性,当重写 equals(Object obj) 方法时,通常也需要重写 hashCode() 方法,以确保 equals(Object obj) 相等的对象具有相同的哈希码。

3、请解释为什么hashCode()方法可能产生哈希碰撞,以及这是否会影响equals(Object obj)方法的正确性?

哈希碰撞是指不同的对象产生相同的哈希码。由于哈希码是一个整数,而整数的范围是有限的,而对象的数量可以是无限的,因此哈希碰撞是不可避免的。

哈希碰撞本身不会影响equals(Object obj)方法的正确性。equals(Object obj)方法用于比较对象的内容是否相等,而哈希码只是用于在集合中快速定位对象的一种机制。即使两个对象产生了哈希碰撞,只要它们的equals(Object obj)方法比较不相等,它们就不会被视为集合中的相同元素。

然而,哈希碰撞可能会影响基于哈希的集合的性能,因为它可能增加在集合中查找元素的时间复杂度。

4、在重写hashCode()方法时,有哪些注意事项?

在重写hashCode()方法时,应该确保在同一个Java应用程序执行期间,只要对象的equals比较中所用的信息没有被修改,那么对该对象多次调用hashCode方法必须始终如一地返回同一个整数。

如果两个对象通过equals(Object obj)方法比较是相等的,那么这两个对象的hashCode()方法必须产生相同的整数结果。

不要求如果两个对象通过equals(Object obj)方法比较是不相等的,那么调用这两个对象中任一对象的hashCode()方法必须产生不同的整数结果。但是,为不相等的对象产生不同整数结果可能会提高哈希表的性能。

二、String、StringBuilder、StringBuffer 的区别?

String 是只读字符串,也就是说 String 引用的字符串内容是不能被改变的。

StringBuffer/StringBuilder 类表示字符串对象可以直接修改。

三、抽象类和接口有什么区别?

抽象类和接口都不能够实例化,但是可以定义抽象和接口类型的引用。一个类如果继承了某个抽象类或者实现某个接口都需要对其中的抽象方法进行实现,否则该类仍然需要被声明为抽象类。

接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部是抽象方法。

四、在多线程情况下 SimpleDateFormat 是线程安全的吗?

在多线程情况下 DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的。如果不在线程安全的情况下使用,在解析或者格式化日期的时候,可能会会获得一个不正确的结果。最佳的时间的多线程的情况下使用的时间工具类是 joda-time

五、抽象类是什么?它和接口有啥区别?

接口用于规范,抽象类用于共性。声明方法的存在而不去实现它的类叫做抽象类。接口时抽象类的变体。在接口中,所有的方法都是抽象的。

相关文章:

  • Linux知识复习第2期
  • 前端实习手记(7):立秋快乐
  • AI学习记录 - gpt如何进行token化,理论知识,以GPT2为举例
  • Linux安全与高级应用(十二)深入探讨Linux系统中的YUM仓库服务与PXE网络装机
  • 使用 MongoDB 构建 AI:Flagler Health 的 AI 旅程如何彻底改变患者护理
  • C:每日一题:单身狗
  • 【DataKit系列】数据迁移-实例搭建步骤(二)
  • 【统信UOS】桌面系统通过自定义内网补丁仓库升级内网系统
  • 【Unity】有限状态机和抽象类多态
  • haproxy基础
  • 怎么给springboot2.5.6配置springcloud
  • js 深入理解原型(prototype)及如何创建对象
  • Visual Studio 和 VSCode 哪个好?
  • 10步搞定Python爬虫从零到精通!
  • python打怪练习
  • 源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
  • gerrit的使用
  • springboot餐饮管理系统-计算机毕业设计源码73168
  • DBAPI 如何对SQL查询出的日期字段进行统一格式转换
  • HtmlUnit:探索Web自动化的强大工具
  • 马克思主义理论研究教学名师系列访谈|曾瑞明:想通了才可能认准,认准了才能做好
  • 小米回应SU7Ultra排位模式限制车辆动力:暂停推送更新
  • 中国经济新动能|警惕数字时代下经济的“四大极化”效应
  • 印媒证实:至少3架印军战机7日在印控克什米尔地区坠毁
  • 云南昆磨高速发生交通事故致3辆车起火,昆明消防:幸无人员伤亡
  • 中东睿评|胡塞武装已成为楔入中东各方力量之间的钉子户