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

实习面试题(答案自敲)、

1、为什么要重写equals方法,为什么重写了equals方法后,就必须重写hashcode方法,为什么要有hashcode方法,你能介绍一下hashcode方法吗?

equals方法默认是比较内存地址;为了实现内容比较,我们需要重写equals方法。

equals和hashcode之间有一个重要的契约,如果两个对象基于equals方法比较是相等的,那么它们的hashcode必须相同;如果比较不同,他们的hashcode不一定不同,但不同的对象应尽力返回不同的hashcode值,以提高哈希表的性能。

如果只重写了equals方法而没有重写hashcode方法,就会违反这个契约,导致哈希表如HashMap和HashSet工作不正常,例如两个内容相等的对象会被认为是不相等的,因为它们的哈希码不同。

hashcode方法用于计算对象的哈希码,这个哈希码用于在基于哈希的集合如HashSet、HashMap中快速查找对象,哈希码是一个整数,由对象的内容计算得到,哈希码的作用是减少比较操作的次数,提高查找效率。

public class test {public static void main(String[] args) {HashSet<User> users = new HashSet<>();//因为两个对象都是new出来的、所以地址不同哈希码也不同不会出现哈希冲突、不会调用equals判断、// 因此两个特征相同的对象就都添加到hashset中去了、解决方法就是重写hashcode()方法、users.add(new User(10,"111"));users.add(new User(10,"111"));for (User i:users) {System.out.println(i);}}
}
class User {int age;String name;public User(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}@Overridepublic String toString() {return "User{" +"age=" + age +", name='" + name + '\'' +'}';}@Overridepublic boolean equals(Object o){if(this==o)return true;if(o==null||getClass()!=o.getClass()){return false;}User user=(User) o;return age== user.age&&Objects.equals(name,user.name);}@Override//重写了hashcode方法。public int hashCode() {return Objects.hash(age,name);}
}

因为重写了hashcode方法,所以特征相同的对象他们的hash值是一样的,会引起哈希冲突,从而调用equals方法进行判断是否为同一对象、因为重写了equals方法,所以这两个对象被判定为重复,所以hashset里只有一份。

2、Object都有哪些方法?

3、==和equals都有有什么区别呢?
4、类加载的过程、
5、JVM的内存模型以及内存结构、
6、GC机制及GC算法、你熟悉的垃圾收集器?(常问CMS G1以及这两者的区别)
7、java的基本数据类型
8、sychronized关键字以及底层实现原理、锁升级的原理、
9、lock关键字以及底层实现原理、
10、CAS的原理、
11、sychronized和ReetrantLock区别?为什么有了sychronized,还要有Lock这个关键字?
12、什么是悲观锁和乐观锁?哪些锁是悲观锁?哪些锁是乐观锁?
http://www.lryc.cn/news/363919.html

相关文章:

  • 二叉树讲解
  • Unity DOTS技术(五)Archetype,Chunk,NativeArray
  • 算法学习笔记(7.1)-贪心算法(分数背包问题)
  • 气膜建筑的施工对周边环境影响大吗?—轻空间
  • 【计算机网络】对应用层HTTP协议的重点知识的总结
  • 30分钟快速入门TCPDump
  • Python | 刷题日记
  • “JS逆向 | Python爬虫 | 动态cookie如何破~”
  • 十.数据链路层——MAC/ARP
  • Linux主机安全可视化运维(免费方案)
  • Vite + Vue 3 前端项目实战
  • python-字符替换
  • 团队项目开发使用git工作流(IDEA)【精细】
  • 爬虫案例实战
  • uniapp uni-popup内容被隐藏问题
  • leetcode155 最小栈
  • 在Ubuntu乌班图上安装Docker
  • 【Redis数据库百万字详解】数据持久化
  • echarts legend. icon的展示
  • PHPstudy情况下上传图片马需要的.htaccess文件
  • 基于最大重叠离散小波变换的PPG信号降噪(MATLAB 2018)
  • Gradio中Button用法及事件监听器click方法使用
  • 【Qt秘籍】[005]-Qt的首次邂逅-创建
  • 亚信安慧AntDB:值得信任的数据产品
  • 超越传统AI 新型多智能体系统MESA,探索效率大幅提升
  • [SWPU 2019]神奇的二维码、buuctf部分web题
  • Python正则表达式匹配中文:深入解析与实战应用
  • 实例Python对比两个word文档并找出不同
  • 2.1 QT随手简记(三)
  • TechM-技术网站