1.【C#】Dictionary的源码TryGetValue和Contains方法使用
2.Java必修课判断String是否包含子串的四种方法及性能对比
3.HashMap里的containsKey方法和List里的contains方法,哪个效率高
4.Xpath 一些使用中遇到的情况
5.CopyOnWriteArrayList原理分析
【C#】Dictionary的TryGetValue和Contains方法使用
在C#字典操作中,获取可能存在的源码值时,通常有两种方法:尝试使用TryGetValue和先判断后再获取。源码本文将通过源码分析,源码比较这两种方法的源码性能。
首先,源码excel源码上传我们来看看TryGetValue的源码源码实现。它通过检查键是源码否存在于字典中,并在找到匹配键时返回对应的源码值。这种方式简洁且高效,源码避免了不必要的源码查找。
接着,源码我们对比一下使用ContainsKey和字典索引的源码实现。这种做法首先需要判断键是源码否存在,然后再获取值。源码这相较于TryGetValue多了一步操作,因此在性能上略显逊色。
总结而言,尝试使用TryGetValue方法会更高效。补码和源码计算通过对比发现,在取值操作中,调用TryGetValue仅需一次查找即可获取所需值,而使用ContainsKey和字典索引则需要进行两次查找。因此,在日常开发中,当需要取字典的值时,推荐优先考虑使用TryGetValue。
对于开发者而言,了解这两种方法的性能差异有助于在实际开发中做出更优的选择,提升代码效率。
Java必修课判断String是否包含子串的四种方法及性能对比
判断一个字符串是否包含某个特定子串是常见的场景,比如判断一篇文章是否包含敏感词汇、判断日志是否有ERROR信息等。本文将介绍四种方法并进行性能测试。 在String的函数中,提供了indexOf(subStr)方法,返回子串subStr第一次出现的带分销源码下载位置,如果不存在则返回-1。例子如下: 最直观判断的方法是contains(subStr),返回类型为boolean,如果包含返回true,不包含则返回false。例子如下: 实际上,String的contains方法是通过调用indexOf方法来判断的,源码如下: 通过强大的正则匹配来判断,虽然有点杀鸡用牛刀的感觉,但也不是不能用,例子如下: Apache的commons-lang3提供许多开箱即用的功能,StringUtils就提供了许多与字符串相关的功能,例子如下: 我们使用JMH工具来对四种方法进行性能测试,Maven引入代码如下: 测试代码如下: 测试结果如下: 最快的就是indexOf方法,其次是contains方法,二者应该没有实际区别,contains是调用indexOf来实现的。Apache的赞 直播平台源码StringUtils为第三方库,相对慢一些。最慢的是使用了正则的Pattern的方法,这不难理解,正则引擎的匹配是比较耗性能的。 本文介绍了判断一个字符串是否包含某个特定子串的四种方法,并通过性能测试进行了对比。其中性能最好的是String的indexOf方法和contains方法,建议使用contains方法,性能好,跟indexOf相比,更直观,更不容易犯错。毕竟让每个人时刻记住返回-1代表不存在也不是一件容易的事。 但是,使用indexOf和contains方法都需要注意做判空处理,这时StringUtils的优势就体现出来了。 总结,四种方法如下: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.
Xpath 一些使用中遇到的情况
小白的爬虫笔记,平时使用xpath解析时遇到的一些情况
1.
在定位"review-list chart"时,chart后面有时有空格,有时没有空格。
网页源代码中chart后面有空格的情况。
使用contains( )进行定位时,属性值不规律或部分变动,中间有空格的情况容易导致定位出错,时而能定位到,时而定位不到。因此,应避免使用含空格的属性值进行定位。可以采用部分属性值定位的方法。
2. contains(text( ),"XXXX")
用于提取评论数,提取结果后再通过正则表达式提取数字即可。
例如,提取包含“下一页”文本的节点url。
3. 不包含
如果定位了包含了其他不需要的内容,例如使用//a[contains(text(),"评论[")]/text()会同时提取到“原文评论数”。这时可以使用不包含not(contains( ))。
4.
提取类似这种部分格式保持不变的url " m.weibo.cn/s/video/show?..."
5. 使用逻辑运算符,结合属性值或属性名定位元素,and与or。
提取a节点中,text( )值为“全文”又要href中包含“ckAll=1”的节点。
多个属性值联合定位,可以更准确定位到元素。
例如,定位div节点既要包含属性值class="c"也要包含id属性,但id属性值不同。
6. 使用索引定位元素,索引的初始值为1,注意与数组等区分开。
返回查找到的第二个符合条件的input元素。
更多例子
7. ".." 选取当前节点的父节点
8. 看这个例子其实这个用正则应该简单些,这里就当练习。
我们分别要提取出“雪漫衫”“男”“其他”这3个内容。
结果
其他两个后面改为[2],[3]就可以,再用正则或者split去“:”。
改动改动看看会输出什么
9. 网上看见的一个例子
将选择没有div父节点的@class="c"所有文本节点
. 结合正则表达式使用选择器
提取这个'美国'和'英语'
XPath『不包含』应该怎么写?
转自公众号,原文链接:未闻Code:XPath『不包含』应该怎么写
我想把其中的你好啊产品经理,很高兴认识你提取出来。
不过结果是一个列表,并且有很多换行符,看起来不够清晰,于是用Python再进行清洗
CopyOnWriteArrayList原理分析
JDK1.5引入并发包,CopyOnWriteArrayList应运而生,专为并发场景优化。
CopyOnWriteArrayList利用写时复制技术实现高效读写。在多个读操作时,共享资源,写操作时复制资源,避免了锁的竞争,提升了性能。
写时复制策略在多个读取者需要访问同一资源时,复制一份原始资源供写操作使用,保证了读操作不受影响。
CopyOnWriteArrayList通过构造方法初始化,确保数组类型为Object[],适应泛型转换需求,避免初始化时的类型错误。
源码分析中,重点介绍了构造方法、add、get、remove、size和contains方法的实现。
在add方法中,通过重载实现不同添加位置的元素添加,确保了数组的复制与元素的正确添加。
get方法直接通过数组引用获取指定下标元素,高效快速。
remove方法执行流程与add类似,仅在数组拷贝参数上有所调整,并在计算需要移动的元素个数时,排除待删除元素。
size方法计算数组长度即为元素个数,因为CopyOnWriteArrayList在使用过程中内部数组始终充满元素,不存在空隙。
contains方法通过全数组遍历检查待检索元素是否存在,根据元素是否为null进行分情况处理。
CopyOnWriteArrayList源码分析至此结束,其高效读写特性使其在并发场景下表现优越。