首页 > 其他分享 >常见面试题4

常见面试题4

时间:2023-10-06 23:24:44浏览次数:34  
标签:面试题 String 对象 StringBuffer 常见 equals hashCode StringBuilder

四 为什么重写 equals() 时必须重写 hashCode() 方法?

因为两个相等的对象的 hashCode 值必须是相等。也就是说如果 equals 方法判断两个对象是相等的,那这两个对象的 hashCode 值也要相等。

如果重写 equals() 时没有重写 hashCode() 方法的话就可能会导致 equals 方法判断是相等的两个对象,hashCode 值却不相等。

思考 :重写 equals() 时没有重写 hashCode() 方法的话,使用 HashMap 可能会出现什么问题。

总结 :

• equals 方法判断两个对象是相等的,那这两个对象的 hashCode 值也要相等。

• 两个对象有相同的 hashCode 值,他们也不一定是相等的(哈希碰撞)。
五 String、StringBuffer、StringBuilder 的区别?
可变性

String 是不可变的

StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串,不过没有使用 final 和 private 关键字修饰,最关键的是这个 AbstractStringBuilder 类还提供了很多修改字符串的方法比如 append 方法。

abstract class AbstractStringBuilder implements Appendable, CharSequence {

char[] value;

public AbstractStringBuilder append(String str) {

if (str == null)

return appendNull();

int len = str.length();

ensureCapacityInternal(count + len);

str.getChars(0, len, value, count);

count += len;

return this;

}

//...

}

线程安全性

String 中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共方法。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
性能

每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
对于三者使用的总结:

操作少量的数据: 适用 String

单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder

多线程操作字符串缓冲区下操作大量数据: 适用 `StringBuffer
————————————————
版权声明:本文为CSDN博主「姜小白程序」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_59281987/article/details/128408175

标签:面试题,String,对象,StringBuffer,常见,equals,hashCode,StringBuilder
From: https://www.cnblogs.com/tianrui67/p/17745255.html

相关文章

  • 常见面试题7
     cookie和session的区别?1.存储位置不同cookie的数据信息存放在客户端浏览器上。session的数据信息存放在服务器上。2.存储容量不同单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的......
  • 常见面试题6
    Java集合框架Java容器分为Collection和Map两大类,Collection集合的子接口有Set、List、Queue三种子接口。我们比较常用的是Set、List,Map接口不是collection的子接口。Collection集合主要有List和Set两大接口•List:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以......
  • 常见面试题1
    一、==和equals的区别==对于基本类型和引用类型的作用效果是不同的:•对于基本数据类型来说,==比较的是值。•对于引用数据类型来说,==比较的是对象的内存地址。因为Java只有值传递,所以,对于==来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引......
  • 【TinyWebServer】13踩坑和面试题
    踩坑在此项目中遇到的一些比较有意义的问题大文件传输先看下游双书上发送逻辑这块的代码,发送数据只调用了writev函数,并对其返回值是否异常做了处理。boolhttp_conn::write(){ inttemp=0; intbyte_have_send=0; intbyte_to_send=m_write_idx; if(byte_to_......
  • 常见的开源软件许可证(License)
    常见的开源软件许可证(License)软件许可证(softwarelicense)是一种格式合同,由软件作者与用户签订,用以规定和限制软件用户使用软件或其源代码的权利,以及作者应尽的义务License受到《合同法》的保护开源的定义开放源代码促进会(OpenSourceInitiative-OSI),提出开源需要满足......
  • 常见的 React 知识
           ......
  • 常见的C语言执行效率优化方法
    C语言之心效率优化写代码时考虑代码的执行效率是一个好习惯,嵌入式开发多年,让自己养成了这样的习惯。优化C语言代码的执行效率是一项重要的任务,可以通过多种方法和注意事项来实现。下面列出了一些常用的方法和注意事项,并结合具体实例进行详细讲解:选择合适的数据结构使用合适的数......
  • 面试题:Redis和MySQL的事务区别是什么?
    大家好,我是小米!今天我要和大家聊聊一个在技术面试中经常被问到的问题:“Redis和MySQL的事务区别是什么?”这个问题看似简单,但实际上涉及到了数据库和缓存两个不同领域的知识,让我们一起来深入了解一下吧!什么是事务?首先,我们需要明确什么是事务。事务是数据库中的一个重要概念,它是一组数......
  • 大数据面试题:MapReduce压缩方式
    可回答:1)Hadoop常见的压缩算法有哪些?问过的一些公司:网易云音乐(2022.11),阿里(2020.08)参考答案:1、MapReduce支持的压缩方式压缩格式hadoop自带?算法文件扩展名是否可切分换成压缩格式后,原来的程序是否需要修改DEFLATE是,直接使用DEFLATE.deflate否和文本处理一样,不需要修改Gzip是,直接......
  • Linux常见面试题,应对面试分享
    操作系统基础1.cpu占⽤率太⾼了怎么办?排查思路是什么,怎么定位这个问题,处理流程其他程序:1.通过top命令按照CPU使⽤率排序找出占⽤资源最⾼的进程2.lsof查看这个进程在使⽤什么⽂件或者有哪些线程3.询问开发或者⽼⼤,是什么业务在使⽤这个进程4.是否可以将这台机器隔离,不影响......