c#数据结构 线性表篇 非常用线性集合总结

        本人能力有限,使用了一些Ai的结论,如有不足还请斧正 

目录

1.HashSet <=> Dictionary

2.SortedSet <=>提供升序方法的List

3.ArrayList<=>List

4.BitArray <=> Bit[] array

5.StringCollection <=>List

6.StringDictionary<=>Dictionary


1.HashSet (可用)<=> 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);
        }
    }
}

2.SortedSet (可用)<=>自己实现Sort的List

  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 

 3.BitArray(重要) <=> bool[] boolArray

        这个学习过网络的同学线性大家都并不陌生,其是更加高效的布尔数组

        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]);
        }
    }
}

4.ArrayList(淘汰)<=>List

        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}");
            }
        }
    }
}

5.StringDictionary((淘汰))<=>Dictionary

  • StringDictionaryStringDictionary 继承自 DictionaryBase 类,实现了 IDictionaryICollection 和 IEnumerable 等非泛型接口。这意味着它是一个非泛型集合,在操作时需要进行类型转换。
  • DictionaryDictionary 是泛型集合,实现了 IDictionaryICollection> 和 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
    }
}

        但是也就仅限如此了 

你可能感兴趣的:(C#,&&,Unity,八股文/数据结构/算法合集,c#,数据结构,开发语言,unity,游戏引擎,程序框架)