您的位置:首页 > 其它

SortedList、SortedSet、HashSet、Hashtable、Dictionary、SortedDictionary 排序/可重复排序/过滤重复排序等简单对比

2012-08-23 23:57 435 查看
直接上代码,做个记号

//泛型的键值集合/有序/Hash算法/占内存较大/不排序,不受装填因子的限制,对读写操作效率较高
Dictionary<int, string> dc = new Dictionary<int, string>();
dc.Add(1, "111111");
dc.Add(2, "222222");
dc.Add(3, "333333");
dc.Add(5, "5555555");
dc.Add(4, "4444444");
dc.Add(10, "101010");
dc.Add(35, "353535");

//泛型的键值集合/int排序
SortedDictionary<int, string> sd = new SortedDictionary<int, string>();
sd.Add(1, "111111");
sd.Add(2, "222222");
sd.Add(3, "333333");
sd.Add(5, "5555555");
sd.Add(4, "4444444");
sd.Add(10, "101010");
sd.Add(35, "353535");

//泛型的键值集合/string排序
SortedDictionary<string, string> sd2 = new SortedDictionary<string, string>();
sd2.Add("1111", "aaaaa");
sd2.Add("22222", "bbbbbb");
sd2.Add("ccccc", "333333");
sd2.Add("555555", "dddddd");
sd2.Add("444444", "cccccc");

//弱类型的键集合/无序/Hash算法/占内存较小/不排序,扩容时会对所有的数据需要重新进行散列计算,所以较适用于读取操作频繁,写入操作较少的操作类型
Hashtable ht = new Hashtable();
ht.Add(1, "111111");
ht.Add(2, "222222");
ht.Add(3, "333333");
ht.Add(5, "5555555");
ht.Add(4, "4444444");
ht.Add(10, "101010");
ht.Add(35, "353535");

//弱类型的键集合/无序/Hash算法/占内存较小/不排序,扩容时会对所有的数据需要重新进行散列计算,所以较适用于读取操作频繁,写入操作较少的操作类型
Hashtable ht2 = new Hashtable();
ht2.Add("1111", "aaaaa");
ht2.Add("22222", "bbbbbb");
ht2.Add("ccccc", "333333");
ht2.Add("555555", "dddddd");
ht2.Add("444444", "cccccc");

//范型int排序(使用内存比SortedDictionary少,对频繁插入移除操作较慢,比较适合排序数据一次性填充列表)
SortedList<int, string> sl = new SortedList<int, string>();
sl.Add(1, "111111");
sl.Add(2, "222222");
sl.Add(3, "333333");
sl.Add(5, "5555555");
sl.Add(4, "4444444");
sl.Add(10, "101010");
sl.Add(35, "353535");

//范型string排序(使用内存比SortedDictionary少,对频繁插入移除操作较慢,比较适合排序数据一次性填充列表)
SortedList<string, string> sl2 = new SortedList<string, string>();
sl2.Add("1111", "aaaaa");
sl2.Add("22222", "bbbbbb");
sl2.Add("ccccc", "333333");
sl2.Add("555555", "dddddd");
sl2.Add("444444", "cccccc");
//sl2.Add("ccccc", "333333");//相同Key不能加入

//int类型/过滤重复/排序
SortedSet<int> ss = new SortedSet<int>();
ss.Add(1);
ss.Add(2);
ss.Add(3);
ss.Add(5);
ss.Add(4);
ss.Add(10);
ss.Add(35);
ss.Add(5);//相同数据被过滤了(可以直接加,成功返回True,失败返回False)

//int类型/过滤重复/不排序
var set = new HashSet<int>() { 3, 8, 2, 1, 3, 3, 6, 8, 7, 2, 8 };
//int类型/过滤重复/排序
var set2 = new SortedSet<int> { 3, 8, 2, 1, 3, 3, 6, 8, 7, 2, 8 };
//string类型/过滤重复/不排序
var set3 = new HashSet<string>() { "3", "8", "2", "1", "3", "3", "6", "8", "7", "2", "8" };
//string类型/过滤重复/排序
var set4 = new SortedSet<string> { "3", "8", "2", "1", "3", "3", "6", "8", "7", "2", "8" };

//过滤重复排序
SortedSet<Person> ss2 = new SortedSet<Person>(new SortAge());
ss2.Add(new Person { FirstName = "Homer", LastName = "Simpson", Age = 47 });
ss2.Add(new Person { FirstName = "Marge", LastName = "Simpson", Age = 45 });
ss2.Add(new Person { FirstName = "Lisa", LastName = "Simpson", Age = 9 });
ss2.Add(new Person { FirstName = "Bart", LastName = "Simpson", Age = 8 });
ss2.Add(new Person { FirstName = "Saku", LastName = "Simpson", Age = 1 });
ss2.Add(new Person { FirstName = "Mikko", LastName = "Simpson", Age = 32 });
ss2.Add(new Person { FirstName = "Bart2", LastName = "Simpson", Age = 8 });//被过滤了

//不过滤重复排序
List<Person> l = new List<Person>();
l.Add(new Person { FirstName = "Homer", LastName = "Simpson", Age = 47 });
l.Add(new Person { FirstName = "Marge", LastName = "Simpson", Age = 45 });
l.Add(new Person { FirstName = "Lisa", LastName = "Simpson", Age = 9 });
l.Add(new Person { FirstName = "Bart", LastName = "Simpson", Age = 8 });
l.Add(new Person { FirstName = "Saku", LastName = "Simpson", Age = 1 });
l.Add(new Person { FirstName = "Mikko", LastName = "Simpson", Age = 32 });
l.Add(new Person { FirstName = "Bart2", LastName = "Simpson", Age = 8 });//不过滤
l.Sort(new SortAge());


Person 类代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}

public class SortAge : IComparer<Person>
{
public int Compare(Person firstPerson, Person secondPerson)
{
if (firstPerson.Age > secondPerson.Age)
return 1;
if (firstPerson.Age < secondPerson.Age)
return -1;
else
return 0;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐