source code reading album

本文探讨了字符串操作中contentEquals方法的实现细节,并对比了charAt(i)与value[i]两种访问字符方式的效率差异。此外,还讨论了ArrayList与LinkedList在实现RandomAccess接口上的不同之处,以及Integer.valueOf()方法在特定数值范围内的缓存使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


public boolean contentEquals(CharSequence cs) {
if (value.length != cs.length())
return false;
// Argument is a StringBuffer, StringBuilder
if (cs instanceof AbstractStringBuilder) {
char v1[] = value;
char v2[] = ((AbstractStringBuilder) cs).getValue();
int i = 0;
int n = value.length;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
// Argument is a String
if (cs.equals(this))
return true;
// Argument is a generic CharSequence
char v1[] = value;
int i = 0;
int n = value.length;
while (n-- != 0) {
if (v1[i] != cs.charAt(i))
return false;
i++;
}
return true;
}


charAt(i)和value[i]的区别:下标访问非常快,而charAt()也是根据下标,额外多了个if判断,效率区别在于charAt()会进出栈+if,单个String效率差别并不大,我试了下,1w长度的字符串,这两种方法仅差3 milliseconds左右, 但要知道jvm里的大部分对象都是String,积沙成塔,这里额外的一点点高效也是非常乐观的。

ArrayList 实现RandomAccess,而LinkedList没有,在get()和subList()的时候这2个方法是不同的。

Integer.valueOf() 如果值是在-128~127,直接取的缓存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值