rs.Push("two");
numbers.Push("three");
numbers.Push("four");
numbers.Push("five");//放进去
foreach (string number in numbers)
{
Console.WriteLine(number);
}
Console.WriteLine($"Pop '{numbers.Pop()}'");//获取并移除
Console.WriteLine($"Peek at next item to dequeue: { numbers.Peek()}");//获取不移除
Console.WriteLine($"Pop '{numbers.Pop()}'");
Stack<string> stackCopy = new Stack<string>(numbers.ToArray());
foreach (string number in stackCopy)
{
Console.WriteLine(number);
}
Console.WriteLine($"stackCopy.Contains(\"four\") = {stackCopy.Contains("four")}");
stackCopy.Clear();
Console.WriteLine($"stackCopy.Count = {stackCopy.Count}");
队列是没有底的瓶子,栈是有底的瓶子
集合:纯粹的集合,容器,东西丢进去,唯一性,无序的。
HashSet:hash分布,元素间没有关系,动态增加容量,去重的。统计用户IP;IP投票;交叉并补;二次好友/间接关注/粉丝集合
HashSet<string> hashSet = new HashSet<string>();
hashSet.Add("123");
hashSet.Add("689");
hashSet.Add("456");
hashSet.Add("12435");
hashSet.Add("12435");
hashSet.Add("12435");
HashSet<string> hashSet1 = new HashSet<string>();
hashSet1.Add("123");
hashSet1.Add("689");
hashSet1.Add("789");
hashSet1.Add("12435");
hashSet1.Add("12435");
hashSet1.Add("12435");
hashSet1.SymmetricExceptWith(hashSet);//补
hashSet1.UnionWith(hashSet);//并
hashSet1.ExceptWith(hashSet);//差
hashSet1.IntersectWith(hashSet);//交
SortSet:排序的集合;去重而且排序;统计排名,每统计一个就丢进去集合
SortedSet<string> sortedSet = new SortedSet<string>();
//IComparer<T> comparer 自定义对象要排序,就用这个指定
sortedSet.Add("123");
sortedSet.Add("689");
sortedSet.Add("456");
sortedSet.Add("12435");
sortedSet.Add("12435");
sortedSet.Add("12435");
SortedSet<string> sortedSet1 = new SortedSet<string>();
sortedSet1.Add("123");
sortedSet1.Add("689");
sortedSet1.Add("456");
sortedSet1.Add("12435");
sortedSet1.Add("12435");
sortedSet1.Add("12435");
sortedSet1.SymmetricExceptWith(sortedSet);//补
sortedSet1.UnionWith(sortedSet);//并
sortedSet1.ExceptWith(sortedSet);//差
sortedSet1.IntersectWith(sortedSet);//交
读取和增删都快的,有没有?有,hash散列,字典。是key-value,一段连续空间放value(开辟的空间比用到的多,hash使用空间换性能),基于key散列计算得到地址索引,这样读取快,但是没有数组快。增删也快,删除时也是计算位置,增加也不影响别人。代价就是,肯定会出现2个key(散列冲突),散列结果一致,可以让第二次的+1;可能会造成效率的降低,尤其是数据量大的情况下,以前测试Dictionary在3W条左右的时候,性能爱是下降的厉害。
Hashtable---key-value,体积可以动态增加,拿着key计算下一个地址,然后放入key-value;object-装箱茶香,如果不同的key得到相同的地址,第二个在前面地址上+1;查找的时候,如果地址对应数据的key不对,那就+1查找。。
浪费了空间,Hashtable是基于数组实现;查找个数据,一次定位;增删,一次定位;增删改查都很快,但是浪费空间,数据太多,重复定位定位,效率就下去了。
Hashtable table = new Hashtable();
table.Add("123", "456");
table[234] = 456;
table[234] = 567;
table[32] = 4562;
table[1] = 456;
table["eleven"] = 456;
foreach (DictionaryEntry objDE in table)
{
Console.WriteLine(objDE.Key.ToString());
|