1.【Java必修课】判断String是法方法否包含子串的四种方法及性能对比
2.HashMap里的containsKey方法和List里的contains方法,哪个效率高
3.C#Dictionary的TryGetValue和Contains方法使用
【Java必修课】判断String是否包含子串的四种方法及性能对比
判断一个字符串是否包含某个特定子串是常见的场景,比如判断一篇文章是源码否包含敏感词汇、判断日志是法方法否有ERROR信息等。本文将介绍四种方法并进行性能测试。源码 在String的法方法函数中,提供了indexOf(subStr)方法,源码小小源码返回子串subStr第一次出现的法方法位置,如果不存在则返回-1。源码例子如下: 最直观判断的法方法方法是contains(subStr),返回类型为boolean,源码如果包含返回true,法方法不包含则返回false。源码例子如下: 实际上,法方法String的源码contains方法是通过调用indexOf方法来判断的,源码如下: 通过强大的法方法正则匹配来判断,虽然有点杀鸡用牛刀的感觉,但也不是不能用,例子如下: Apache的commons-lang3提供许多开箱即用的功能,StringUtils就提供了许多与字符串相关的功能,例子如下: 我们使用JMH工具来对四种方法进行性能测试,Maven引入代码如下: 测试代码如下: 测试结果如下: 最快的缘分音乐APP源码就是indexOf方法,其次是contains方法,二者应该没有实际区别,contains是调用indexOf来实现的。Apache的StringUtils为第三方库,相对慢一些。最慢的是使用了正则的Pattern的方法,这不难理解,正则引擎的匹配是比较耗性能的。 本文介绍了判断一个字符串是否包含某个特定子串的四种方法,并通过性能测试进行了对比。15765-2源码其中性能最好的是String的indexOf方法和contains方法,建议使用contains方法,性能好,跟indexOf相比,更直观,更不容易犯错。毕竟让每个人时刻记住返回-1代表不存在也不是一件容易的事。 但是,使用indexOf和contains方法都需要注意做判空处理,这时StringUtils的layui模板引擎源码优势就体现出来了。 总结,四种方法如下:indexOf(subStr):返回子串第一次出现的位置,不存在返回-1。
contains(subStr):返回true或false,是否包含。
Pattern匹配:使用正则匹配,相对耗性能。
StringUtils.contains:Apache库提供,相对慢。
性能测试结果显示,梦幻西游源码版本indexOf和contains方法最佳,建议使用contains方法。Apache库的StringUtils方法相对慢,正则匹配方法最慢。在使用方法时,注意处理空值问题。希望本文能帮助你更好地理解和使用这些方法。HashMap里的containsKey方法和List里的contains方法,哪个效率高
hashmap得containskey相比而言比较查询比较高,毕竟hashmap是基于哈希表的,哈希函数不是盖出来的,在对付数据查找的时候效率挺高的。
list.contains方法其实调用的是indexof(obj)方法,需要遍历整个list,运气差就要遍历所有list.
C#Dictionary的TryGetValue和Contains方法使用
在C#字典操作中,获取可能存在的值时,通常有两种方法:尝试使用TryGetValue和先判断后再获取。本文将通过源码分析,比较这两种方法的性能。
首先,我们来看看TryGetValue的源码实现。它通过检查键是否存在于字典中,并在找到匹配键时返回对应的值。这种方式简洁且高效,避免了不必要的查找。
接着,我们对比一下使用ContainsKey和字典索引的实现。这种做法首先需要判断键是否存在,然后再获取值。这相较于TryGetValue多了一步操作,因此在性能上略显逊色。
总结而言,尝试使用TryGetValue方法会更高效。通过对比发现,在取值操作中,调用TryGetValue仅需一次查找即可获取所需值,而使用ContainsKey和字典索引则需要进行两次查找。因此,在日常开发中,当需要取字典的值时,推荐优先考虑使用TryGetValue。
对于开发者而言,了解这两种方法的性能差异有助于在实际开发中做出更优的选择,提升代码效率。