最近用到查找,很简单的字符串去重操作,从A字符串集合中去掉在B字符串集合中已经存在的字符串,去重很见到,从A中读取一个,在B里面查找,如果B里面已经有了,那就不管,如果没有,那就保留或者存储到临时容器中,当A被遍历一遍之后,也就查完了。思路是这样,如何快速的遍历查找是关键,按照原有逻辑,嵌套遍历时间复杂度O(sumA*sumB)时间开销过长,严重破坏体验效果
解决思路:首先要确定,使用查找方式比遍历方式要节省时间,目前我已知的快速查找方式是二分查找,这样比较快速,创建红黑树提供思路,确定string为树节点的值,如何确定键,也就是key值是一个问题,确定键值对唯一,不能产生一个键对应两个值的问题。
最简单的,想到了md5值,因为不同的字符串得到的md5也不一样,这时候我走进一个误区,当A,B两个树容器全部建立完毕之后,我仍然使用查找的方式,确定A[k]是不是在B也有一个B[k],仍然是遍历查找B[k]解决,时间上虽然有节省,但是没有减少多少。
经过完善,有两个方案。
方案一:
吧A的k和v拿出来,添加到B中,如果B的长度改变,那么就是添加成功,如果长度没有变,则B中有k,v对与功能的键值对存在
方案二:
获取A的k,v和B的k集合B.keys(),如果k在B.keys()里面,就说明B中有v,如果没有,就获取了对比出来要处理的v