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

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

目录

[1.HashSet <=> Dictionary](#1.HashSet <=> Dictionary)

[2.SortedSet <=>提供升序方法的List](#2.SortedSet <=>提供升序方法的List)

3.ArrayList<=>List

[4.BitArray <=> Bit\[\] array](#4.BitArray <=> Bit[] array)

[5.StringCollection <=>List](#5.StringCollection <=>List)

6.StringDictionary<=>Dictionary


1.HashSet (可用)<=> Dictionary<onlyTKey,notUseTValue>

使用途径:因为字典的查询元素:Contains 平均时间复杂度为 (O(1)

所以一些场合将其代替List 但是普通字典又是键值对形式 所以不想要Value的时候可以使用HashSet

去除表中重复元素:

cs 复制代码
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> numbersWithDuplicates = new List<int> { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 };
        HashSet<int> uniqueNumbers = new HashSet<int>(numbersWithDuplicates);

        foreach (int number in uniqueNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

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

SortedSet<T> 同样是一个存储唯一元素的集合,但它会对元素进行自动排序

如果除了元素唯一性 ,你还需要集合中的元素有序 ,那么 SortedSet<T> 是不错的选择

cs 复制代码
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        SortedSet<int> sortedSet = new SortedSet<int>();
        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 属性改变其长度

cs 复制代码
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<Object>

ArrayList是非泛型集合 其存储的是Objcet 所以每次存储和获取元素时都需要进行装箱(值类型转换为 object 类型)和拆箱(object 类型转换为值类型)操作,这会带来一定的性能开销

因此,不建议使用但是仍然可以用

cs 复制代码
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<string,string>

  • StringDictionaryStringDictionary 继承自 DictionaryBase 类,实现了 IDictionaryICollectionIEnumerable 等非泛型接口。这意味着它是一个非泛型集合,在操作时需要进行类型转换。
  • Dictionary<string, string>Dictionary<string, string> 是泛型集合,实现了 IDictionary<string, string>ICollection<KeyValuePair<string, string>>IEnumerable<KeyValuePair<string, string>> 等泛型接口。泛型的使用使得代码更加类型安全,无需进行显式的类型转换

StringDictionary 是大小写不敏感的。也就是说,在 StringDictionary 中,键 "Key""key" 被视为相同的键

cs 复制代码
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
    }
}

但是也就仅限如此了

相关推荐
星栈独行8 小时前
翻完 Pi 源码:它和 Codex、Claude Code 有何不同
开发语言·javascript·人工智能·程序人生
qq_448011168 小时前
C语言中的变量和函数的定义与声明
android·c语言·开发语言
孫治AllenSun9 小时前
【DataX】生产环境搭建DataX集群案例
java·开发语言·jvm
c2385610 小时前
把 C++ 内存分配拆透:new 与 malloc 的三层血缘
开发语言·c++·算法
moonsims11 小时前
星闪在跨域无人化系统作用
开发语言·php
宵时待雨12 小时前
优选算法专题9:哈希表
数据结构·算法·散列表
txzrxz12 小时前
最短路问题——Dijkstra 算法
数据结构·c++·算法·最短路·优先队列
Iruoyaoxh12 小时前
栈和队列~
java·开发语言
noipp12 小时前
推荐题目:洛谷 P6231 [JSOI2013] 公交系统
c语言·数据结构·c++·算法·游戏·洛谷·luogu
Hrain-AI12 小时前
2026 企业 AI 编程智能体实战:Codex 与 Claude Code
开发语言·人工智能·kotlin