当前页面: 开发资料首页 → J2SE 专题 → 如何最快的判断一个数字(或字符串)是否是一个集合中的一员?谢谢大家。
如何最快的判断一个数字(或字符串)是否是一个集合中的一员?谢谢大家。
摘要: 如何最快的判断一个数字(或字符串)是否是一个集合中的一员?谢谢大家。
如何最快的判断一个数字(或字符串)是否是一个集合中的一员?
比如:
有一串数字 3,23,44,78,22,98
我想知道数字a 是否是这组数中的一个。
我想了2种方法,一种方法是把上面的数,装进数组里,然后循环数组,判断每一个元素是否和a相等。
第二种方法,把数字放入hashMap 作为key ,然后判断 hashMap.containsKey(a) 是否为真
我感觉好像都不太好,有什么方法又快速又简洁呢?最快速的。
谢谢大家!
何必呢
无论怎么样
对于无序的集合
时间复杂度都是n
楼上的有道理!
就是都一样拉
Hash算是比较快的了
如果集合有一些特性的话,还是有些trick的
如果要速度的话,用HashSet。contains()最快
同意樓上的
如果是比较大的数据库的比较,一开始建立这个数组的时候先把他排序。
然后就可以用折半搜索法啊什么的来看。就是先把这个数字跟中间的比较。每次折半。
先搞清楚是要单次判断还是要多次判断。
如果是单次判断,且源数组本身是有序的,就用“对分法”好了。如果源数组本身是无序的,恐怕最好就是逐个比较了,别排序了,不够费劲的。
如果是多次判断,当然就要考虑把源数组先排序,然后每次就可以用“对分法”了。或者直接用 TreeSet。
路过,友情up...
用Hash快,Hash的时间复杂度比数组要快
mark!
还用那么麻烦,
把你的那个串和那个待找的数字前后加个“,”, 然后看能不能在字符串中查找到,找到了不就有了吗?
String one = "," + "3,23,44,78,22,98" + ","
String tow = "," + oneNumber + ","
if(one.indexOf(tow) > 0 )
{
//不就找到了吗?
}
对了,注意 全角和半角符号的差别
sunday_hl(何去何从)
不错
何去何从的方法好.