本人能力有限,使用了一些Ai的结论,如有不足还请斧正
目录
1.HashSet <=> Dictionary
2.SortedSet <=>提供升序方法的List
3.ArrayList<=>List
4.BitArray <=> Bit[] array
5.StringCollection <=>List
6.StringDictionary<=>Dictionary
使用途径:因为字典的查询元素:Contains
平均时间复杂度为 \(O(1)\)
所以一些场合将其代替List 但是普通字典又是键值对形式 所以不想要Value的时候可以使用HashSet
去除表中重复元素:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List numbersWithDuplicates = new List { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 };
HashSet uniqueNumbers = new HashSet(numbersWithDuplicates);
foreach (int number in uniqueNumbers)
{
Console.WriteLine(number);
}
}
}
SortedSet
同样是一个存储唯一元素的集合,但它会对元素进行自动排序
如果除了元素唯一性,你还需要集合中的元素有序,那么 SortedSet
是不错的选择
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
SortedSet sortedSet = new SortedSet();
sortedSet.Add(3);
sortedSet.Add(1);
sortedSet.Add(2);
foreach (int num in sortedSet)
{
Console.Write(num + " ");
}
Console.WriteLine();
}
}
打印结果:1 2 3
这个学习过网络的同学线性大家都并不陌生,其是更加高效的布尔数组
BitArray
是一个专门用于存储位值的集合类,它以紧凑的方式存储布尔值,每个布尔值仅占 1 位。这意味着在存储大量布尔值时,BitArray
占用的内存空间相对较小
其 提供了丰富的位操作方法,如 And
(按位与)、Or
(按位或)、Xor
(按位异或)、Not
(按位取反)等,方便进行复杂的位运算
支持动态调整大小,可以通过 Length
属性改变其长度
using System;
using System.Collections;
class Program
{
static void Main()
{
BitArray bitArray1 = new BitArray(new bool[] { true, false, true });
BitArray bitArray2 = new BitArray(new bool[] { false, true, true });
bitArray1.And(bitArray2); // 按位与操作
for (int i = 0; i < bitArray1.Length; i++)
{
Console.WriteLine(bitArray1[i]);
}
}
}
ArrayList是非泛型集合 其存储的是Objcet 所以每次存储和获取元素时都需要进行装箱(值类型转换为 object
类型)和拆箱(object
类型转换为值类型)操作,这会带来一定的性能开销
因此,不建议使用但是仍然可以用
using System;
using System.Collections;
class Program
{
static void Main()
{
ArrayList logEntries = new ArrayList();
logEntries.Add("Operation started");
logEntries.Add(123);
logEntries.Add(DateTime.Now);
foreach (object entry in logEntries)
{
if (entry is string)
{
Console.WriteLine($"String: {entry}");
}
else if (entry is int)
{
Console.WriteLine($"Integer: {entry}");
}
else if (entry is DateTime)
{
Console.WriteLine($"Date: {entry}");
}
}
}
}
StringDictionary
:StringDictionary
继承自 DictionaryBase
类,实现了 IDictionary
、ICollection
和 IEnumerable
等非泛型接口。这意味着它是一个非泛型集合,在操作时需要进行类型转换。Dictionary
:Dictionary
是泛型集合,实现了 IDictionary
、ICollection>
和 IEnumerable>
等泛型接口。泛型的使用使得代码更加类型安全,无需进行显式的类型转换 StringDictionary
是大小写不敏感的。也就是说,在 StringDictionary
中,键 "Key"
和 "key"
被视为相同的键
using System;
using System.Collections.Specialized;
class Program
{
static void Main()
{
StringDictionary stringDict = new StringDictionary();
stringDict.Add("Key", "Value1");
stringDict["key"] = "Value2";
Console.WriteLine(stringDict["Key"]); // 输出: Value2
}
}
但是也就仅限如此了