要具体情况具体分析,
1.List<User>是临时存储用户数据的对象,如果之做简单的1到2次使用就不要再排序了,即使是最快的排序算法也需要nlogn的平均时间复杂度。直接遍历的速度是O(n).
2.如果是长期保存用户信息,并且会给其他的用户使用来验证用户密码等,可以考虑排序。这样长远来看确实效率高了。
3.用户信息考虑别的方式存储,不知道是你数据源的原因还是代码实现的问题。一般考虑方式到数据库里处理。这个是通用的做法。
4.HashTable不错,但是受限制。效率很高o(1).信息是只有键值和键。
第一种方法:用Ustr做键存哈希表。
第二种方法:用Ustr排序,然后用二分查找,不要遍历。
是个难题啊,要是在数据库中就不成问题了。
建立哈希表
private static System.Collections.Hashtable user= new System.Collections.Hashtable();
给哈希表赋值
user.Add(ID,Name);
…………
读取的时候用
select * from ..where Ustr=user[Ustr.ID]
或者:if(where Ustr=user[Ustr.ID])
不知道你怎么读取的数据下面的就没办法帮助你了!
如果User类是业务实体类,最好的方式是在业务逻辑相应的类中写个Get1User()方法......,而不是先获取所有然后存储在List<User>然后再检索。。。。
恩,对对,如果说,你的数据类型可以改变,就使用hashtable就行了
如果不能改变,设计一下查找算法。先将你的list排序,然后二分法查找吧
如果速度再不行,就要换换查找算法了
换一下数据结构,这个样子吧
///key:User.Ustr value:User Instance
SortedDictionary<string,User> userDic = new SortedDictionary<string,User>();
userDic.Add( myUser.Ustr, myUser );
我是新手,来看看,看到hashtable还有这样的用法,真的很不错。
用二分法,用简单的数据结构,提高查询速度。
建一个内存索引
Dictionary<string, int> _Index = new Dictionary<string, int>;
键值是 Ustr, 指向该元素在 List<User> 列表中的序号。
如果不想用哈希建立索引,也可以考虑用堆排序实现插入排序。
或者用B+树也可以。
不过我还是觉得用哈希是最简单高效的。