C# 各类集合用法汇总【全面示例各种方法】

69 篇文章 53 订阅
订阅专栏

1、ArrayList

特点:不定长度的,大小可根据需要自动扩充,内存连续分配的。

ArrayList是一个可动态维护是长度的集合,又称动态数组,它不限制元素的个数和数据类型,允许把任意类型的数据保存到ArrayList中。数组类Array与动态数组类ArrayList的区别主要如下:
(1)Array的大小是固定的,而ArrayList的大小可根据需要自动扩充。
(2)在Array中一次只能读写一个元素的值,而ArrayList允许添加、插入或移除某一范围的元素。
(3)Array的下限可以自定义,而ArrayList的下限始终为0。
(4)Array可以有多个维度,而ArrayList始终是一维的。
(5)Array位于System命名空间中,ArrayList位于System.Collections命名空间中。
需要注意的是:ArrayList会动态调整索引,在删除一个元素后,该元素后面的索引值会自动减少1。
由于可变数组在使用foreach循环遍历的时候会被锁定,一边遍历一边删除会出现问题,可能会抛出ConcurrentModificationException异常
解决办法:
以下三种方式是比较常规的解决办法:
一、迭代器删除
利用iterator自带的remove方法进行删除,由于iterator.remove()方法删除时会自动进行数组下进行移位操作。
public static void iterator(ArrayList list) {
Iterator it = list.iterator();
while (it.hasNext()) {
Long a = it.next();
if (a == 3) {
it.remove();
}
}
System.out.println(list);
二、for循环倒序删除
for循环正序删除也可以,只不过每删除一个元素,数组的list.size()会立刻发生改变,可能会导致删除不干净。【也可以通过每删除一次对i–一次】
public static void backDel(ArrayList list) {
for (int i = list.size() - 1; i > 0; i–) {
if (list.get(i) == 3) {
list.remove(i);
}
}
System.out.println(list);
}
三、lambda表达式删除
public static void lambda(ArrayList list) {
ArrayList delList = new ArrayList<>();
list.stream().forEach(vo -> {
if (vo == 3) {
delList.add(vo);
}
});
list.removeAll(delList);
System.out.println(list);
}
————————————————

基础用法:

//定义一个 集合,集合是一个类,在using System.Collections库中,需要引用
ArrayList al = new ArrayList();  
//Array[] array = new Array();会报错,数组要定义大小才可以使用 应为Array[] array = new Array[2];

//给ArrayList 集合赋值
ArrayList al2 = new ArrayList() { 3,7,8,"hello",4.56};

//元素没有类型限制 任何元素都当成object处理
al.Add("object");//末尾添加元素

//逗号前面的是索引号,逗号后面的是数据(当集合中有三个数据,插入的索引号为1时,则原为1索引号的数据将为2,后面的依次往后退一位)
al.Insert( 1,"abc" );

//括号内填的是集合中要移除的数据(在移除中若集合中有两个重复的数 .Remove() 只移除第一次出现的数)
al.Remove("object");

//括号内填的是集合中要移除的数据的索引号
al.RemoveAt(3);

int n = al.Count;//获取集合中元素的个数

int s = al.IndexOf("object");       //括号中是要找的元素,这个元素第一次出现的索引号

int s1 = al.LastIndexOf("object");  //括号中是要找的元素,这个元素最后一次出现的索引号

al.Sort();//这是升序排序,降序排序的话要在升序排序方法后用翻转(翻转———   al.Reverse();

al.Clear();  //清空集合

//复制集合中的元素数据,装入新的集合当中
ArrayList xal = new ArrayList();
xal = (ArrayList)al.Clone();

//判断一个集合里面是不是包含这个元素数据返回bool值
bool b = al.Contains();//括号内为要查找是否集合包含的元素

var objArr= al.ToArray(al2);//将ArrayList里面的元素复制到数组中

al.AddRange(al2); //将al2集合添加到al末尾

int c = al.Capacity;//ArrayList的容量,初始容量为4,扩容后为原来的两倍

Array copyArray = new Array[al.Count];
al.CopyTo(copyArray);//将al集合的元素对象拷贝到数组copyArray中

Func<string, int> func = m => 1;
al.Add(func);//可以放Delegate

注意:频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方法经过优化,不在此列)引起的效率损失

遍历ArrayList

 ArrayList al = new ArrayList();
 //添加元素....略
 
 //第一种遍历ArrayList的方法
 Console.WriteLine("第一种遍历ArrayList的方法:");
 foreach (int i in al)
	{
         Console.Write(i + " ");
	}
//第二种遍历ArrayList的方法
 Console.WriteLine("第二种遍历ArrayList的方法:");
 for(int i = 0; i < al.Count; i++)
 {
 	 Console.Write(al[i].ToString() + " "); 
 }

//第三种遍历ArrayList的方法
 Console.WriteLine("第三种遍历ArrayList的方法:");
 IEnumerator ie=arr.GetEnumerator();//迭代器:具体解析在代码下面有
 while(ie.MoveNext())
 {
    Console.Write(ie.Current.ToString()+" ");
 }

IEnumberator,枚举器(迭代器) , 字面意思,用来一个一个枚举。
其关键成员有:当前对象current,是否有下一个movenext
IEnumerable,可枚举的, 字面意思,继承了我就变成了一个可枚举的对象。
其只有一个成员 GetEnumerator,返回枚举器类型。

2、泛型List

List和ArrayList的区别
1.list性能较高,ArrayList性能较低
2.list一次存储中只能存储泛型中的类型,ArrayList在一次存储中任何类型的数据
3.List中获取值取出的是泛型中发的类型,因为ArrayList对元素没有限制,系统会将中获取的值当object类型的数据, 如果想获取到其中的内容需要进行
4. List在使用时候需要导入的using指令为using System.Collections.Generic; ArrayList在使用的时候需要导入的using指令为using System.Collections;
5.List属于泛型集合 ArrayList属于非泛型集合
6.List 是个强类型,很安全。其次看那个尖括号,它是 C#2.0 时加入的泛型,所以并不存在像 ArrayList要拆/装箱以此造成性能浪费。

利用System.Collections.Generic命名空间下面的List泛型类创建集合,语法如下:

List<T> lst= new List<T>();

其中的"T"就是所要使用的类型,既可以是简单类型,如string、int,也可以是用户自定义类型。

常用方法:

Count 属性,用于获取数组中当前元素数量
Item( ) 通过指定索引获取或设置元素。对于List类来说,它是一个索引器。
Add( ) 在List中添加一个对象的公有方法
AddRange( ) 公有方法,在List尾部添加实现了ICollection接口的多个元素
BinarySearch( ) 重载的公有方法,用于在排序的List内使用二分查找来定位指定元素.
Clear( ) 在List内移除所有元素
Contains( ) 测试一个元素是否在List内
CopyTo( ) 重载的公有方法,把一个List拷贝到一维数组内
Exists( ) 测试一个元素是否在List内
Find( ) 查找并返回List内的出现的第一个匹配元素
FindAll( ) 查找并返回List内的所有匹配元素
GetEnumerator( ) 重载的公有方法,返回一个用于迭代List的枚举器
Getrange( ) 拷贝指定范围的元素到新的List内
IndexOf( ) 重载的公有方法,查找并返回每一个匹配元素的索引
Insert( ) 在List内插入一个元素
InsertRange( ) 在List内插入一组元素
LastIndexOf( ) 重载的公有方法,,查找并返回最后一个匹配元素的索引
Remove( ) 移除与指定元素匹配的第一个元素
RemoveAt( ) 移除指定索引的元素
RemoveRange( ) 移除指定范围的元素
Reverse( ) 反转List内元素的顺序
Sort( ) 对List内的元素进行排序
ToArray( ) 把List内的元素拷贝到一个新的数组内
trimToSize( ) 将容量设置为List中元素的实际数目

List的基础、常用方法:

(1)、声明:
①、List<T> mList = new List<T>();
T为列表中元素类型,现在以string类型作为例子

List<string> mList = new List<string>();

②、List<T> testList =new List<T> (IEnumerable<T> collection);
以一个集合作为参数创建List:

string[] temArr = { "Ha", "Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", "Locu" };
List<string> testList = new List<string>(temArr);

(2)、添加元素:
①、添加一个元素
语法: List. Add(T item)

List<string> mList = new List<string>();
mList.Add("John");

②、添加一组元素
语法: List. AddRange(IEnumerable<T> collection)

List<string> mList = new List<string>();
string[] temArr = { "Ha","Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku",  "Locu" };
mList.AddRange(temArr);

③、在index位置添加一个元素
语法:Insert(int index, T item);

List<string> mList = new List<string>();
mList.Insert(1, "Hei");

④、遍历List中元素
语法:

foreach (T element in mList)  //T的类型与mList声明时一样
{
    Console.WriteLine(element);
}

例:

List<string> mList = new List<string>();
...//省略部分代码
foreach (string s in mList)
{
    Console.WriteLine(s);
}

(3)、删除元素:
①、删除一个值
语法:List. Remove(T item)

mList.Remove("Hunter");

②、 删除下标为index的元素
语法:List. RemoveAt(int index);

mList.RemoveAt(0);

③、 从下标index开始,删除count个元素
语法:List. RemoveRange(int index, int count);

mList.RemoveRange(3, 2);

(4)、判断某个元素是否在该List中:
语法:List. Contains(T item) 返回值为:true/false

if (mList.Contains("Hunter"))
{
    Console.WriteLine("There is Hunter in the list");
}
else
{
    mList.Add("Hunter");
    Console.WriteLine("Add Hunter successfully.");
}

(5)、给List里面元素排序:
语法: List. Sort () 默认是元素第一个字母按升序

mList.Sort();

自定义规则排序

/// <summary>
///①通用自定义
/// </summary>
list.Sort((left, right) =>
{
    if (left.n > right.n)//其中 n 是某个你希望以此进行排序的属性//此时按 n 由小到大的顺序排序; 若想由大到小排列,此处改为  left.n < right.n
        return 1;
    else if (left.n == right.n)
        return 0;
    else
        return -1;
});

/// <summary>
/// ②针对属性是字符串的排序
/// </summary>
list.Sort((left, right) =>
{
    return left.Date.CompareTo(right.Date);//其中Date是时间字符串             
});

(6)、给List里面元素顺序反转:
语法:List. Reverse () 可以与List. Sort ()配合使用,达到想要的效果

mList. Reverse();

(7)、List清空:
语法:List. Clear ()

mList.Clear();

(8)、获得List中元素数目:
语法: List. Count () 返回int值

int count = mList.Count();
Console.WriteLine("The num of elements in the list: " +count);

2、List的进阶、强大方法:
本段举例用的List:

string[] temArr = { "Ha","Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", " "Locu" };
mList.AddRange(temArr);

(1)、List.FindAll方法:检索与指定谓词所定义的条件相匹配的所有元素
语法:public List<T> FindAll(Predicate<T> match);

List<string> subList = mList.FindAll(ListFind); //委托给ListFind函数
foreach (string s in subList)
{
    Console.WriteLine("element in subList: "+s);
}

这时subList存储的就是所有长度大于3的元素。

(2)、List.Find 方法:搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List 中的第一个匹配元素。
语法:public T Find(Predicate<T> match);

Predicate是对方法的委托,如果传递给它的对象与委托中定义的条件匹配,则该方法返回 true。当前 List 的元素被逐个传递给Predicate委托,并在 List 中向前移动,从第一个元素开始,到最后一个元素结束。当找到匹配项时处理即停止。

Predicate 可以委托给一个函数或者一个拉姆达表达式:

委托给拉姆达表达式:

string listFind = mList.Find(name =>  //name是变量,代表的是mList中元素,自己设定
{     
   if (name.Length > 3)
   {
      return true;
   }
  return false;
});
Console.WriteLine(listFind);     //输出是Hunter

委托给一个函数:

string listFind1 = mList.Find(ListFind);  //委托给ListFind函数
Console.WriteLine(listFind);    //输出是Hunter
 
//ListFind函数
public bool ListFind(string name)
{
    if (name.Length > 3)
    {
        return true;
    }
    return false;
}

这两种方法的结果是一样的。

(3)、List.FindLast 方法:搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List 中的最后一个匹配元素。
语法:

public T FindLast(Predicate<T> match);

用法与List.Find相同。

(4)、List.TrueForAll方法: 确定是否 List 中的每个元素都与指定的谓词所定义的条件相匹配。
语法:public bool TrueForAll(Predicate<T> match);

委托给拉姆达表达式:

bool flag = mList.TrueForAll(name =>
{
    if (name.Length > 3)
    {
     return true;
    }
    else
    {
     return false;
    }
});
Console.WriteLine("True for all:  "+flag);  //flag值为

委托给一个函数,这里用到上面的ListFind函数:

bool flag = mList.TrueForAll(ListFind);    //委托给ListFind函数
Console.WriteLine("True for all:  "+flag);  //flag值为false

这两种方法的结果是一样的。

(5)List.Take(n)方法: 获得前n行 返回值为IEnumetable,T的类型与List的类型一样

IEnumerable<string> takeList=  mList.Take(5);
foreach (string s in takeList)
{
      Console.WriteLine("element in takeList: " + s);
}

这时takeList存放的元素就是mList中的前5个。

(6)、List.Where方法:检索与指定谓词所定义的条件相匹配的所有元素。跟List.FindAll方法类似。

IEnumerable<string> whereList = mList.Where(name =>
{
   if (name.Length > 3)
   {
      return true;
   }
   else
  {
     return false;
  }
});
 
foreach (string s in subList)
{
   Console.WriteLine("element in subLis");
}

这时subList存储的就是所有长度大于3的元素。

(7)、List.RemoveAll方法:移除与指定的谓词所定义的条件相匹配的所有元素。
语法: public int RemoveAll(Predicate<T> match);

mList.RemoveAll(name =>
{
     if (name.Length > 3)
    {
        return true;
    }
    else
    {
        return false;
    }
});
 
foreach (string s in mList)
{
    Console.WriteLine("element in mList:     " + s);
}

这时mList存储的就是移除长度大于3之后的元素。
(8)List.Except()方法,求两个List的差集
语法: ListA.Except(ListB)。ListA和ListB代表同一类型的类型的List集合数据,返回结果是,在ListA中但是不在ListB中的元素的集合。

List<int> list1 = new List<int> { 1, 2, 3, 4 };
List<int> list2 = new List<int> { 3, 4, 5, 6 };
  
List<int> exceptList = list1.Except(list2).ToList();

运算得到的结果集为:exceptList集合中包含2个元素,为1和2。

3、LinkedList

LinkedList:双向链表 元素不连续分配,每个元素都有记录前后节点。

在这里插入图片描述
链表不能通过元素索引访问。找元素只能遍历。增删比较快,增加或删除,只需把这个元素的前后两个元素指向的元素节点改一下。

//在头部和尾部都标识了上一个元素和下一个元素所处位置
LinkedList<int> list = new LinkedList<int>();
list.AddLast(1);
list.AddFirst(1);
bool isBool = list.Contains(1);//判断链表中是否有1这个元素
 
LinkedListNode<int> list1 = list.Find(123);//找到元素123的这个节点
list.AddBefore(list1, 0);//前面增加
list.AddAfter(list1, 0);//后面增加
 
list.Remove(1);
list.Remove(list1);//根据节点删除
list.RemoveFirst();
list.RemoveLast();
list.Clear();

4、Queue

Queue 队列,就是链表 先进先出

//用处;放任务延迟执行 A不断写入任务,B不断获取任务执行 每次拿最近的一个任务
Queue<string> queue = new Queue<string>();
queue.Enqueue("object");//添加数据
queue.Enqueue("object1");
foreach (var item in queue)
{
 Console.WriteLine(item);
}
queue.Dequeue();//获取最先进入队列的元素,获得并移除
queue.Peek();//获取但不移除

5、Stack

Stack:栈 也是链表, 先进后出 先产生的数据最后使用

Stack<string> stack = new Stack<string>();
stack.Push("object");//添加数据
stack.Push("object1");
stack.Pop();//获取最后进入队列的元素 获得并移除
stack.Peek();//获取不移除
C#中(线程)栈的内存释放也是一样,先实例化的对象最后释放(在栈中声明的变量,最先声明的最后GC)

在这里插入图片描述

Set类型集合

6、HashSet

HashSet:hash分布,元素间没关系(不用记录前后节点),动态增加.

HashSet<string> hashSet = new HashSet<string>();
hashSet.Add("object1");//添加元素
hashSet.Add("object2");
hashSet.Add("object3");
hashSet.Add("object1");//会自动去重
int count = hashSet.Count;//获得数量
hashSet.Contains("object");

HashSet<string> hashSet1 = new HashSet<string>();
hashSet1.Add("object1");
hashSet1.Add("object2");
hashSet1.Add("object4");
hashSet1.SymmetricExceptWith(hashSet);//补集:不包含hashSet1和hashSet共有的所有元素
hashSet1.UnionWith(hashSet);//并集:hashSet1和hashSet所有的元素
hashSet1.ExceptWith(hashSet);//差集:hashSet1有的元素而hashSet没有的元素
hashSet1.IntersectWith(hashSet);//交集:共同的元素
hashSet1.ToList();
hashSet1.Clear();

7、SortedSet

SortedSet:排序集合 去重+排序.SortedSet也可以做交差并补.

//IComparer<T>? comparer 自定义对象要排序,就用这个指定
SortedSet<string> sortedSet = new SortedSet<string>();
sortedSet.Add("object1");
sortedSet.Add("object2");
sortedSet.Add("object1");//会自动去重
int count = sortedSet.Count;
sortedSet.Contains("object1");
HashTable(key-value)类型集合

8、Hashtable:

拿着key计算一个内存地址,然后放入key-value。长度不定,可以动态增加。放入的都是object类型,所以避免不了装箱拆箱。

//如果不同的key得到相同的内存地址,第二个在前面的地址上+1,由此会形成数组
 //查找的时候,如果地址对应的key不对,那就+1查找//查找个数据 一次定位,增删查改都很快
 //数据太多 重复定位,效率就下去了
 Hashtable hashtable = new Hashtable();
 hashtable.Add("key", "value");
 hashtable[111] = 222;//KEY,VALUE
 foreach (DictionaryEntry item in hashtable)
 {
  Console.WriteLine(item.Key.ToString());
  Console.WriteLine(item.Value.ToString());
 }
 //线程安全
 Hashtable.Synchronized(hashtable);//只有一个线程写,多个线程读

9、Dictionary:

相当于泛型版本的HashTable.因为数据基于泛型,减少了装箱拆箱的消耗.

<strong>Dictionary<int, string> pairs = new Dictionary<int, string>();
pairs.Add(1, "object1");
pairs[2] = "object2";
foreach (var item in pairs)
{
 Console.WriteLine(item.Key.ToString(), item.Value);
}
pairs.ContainsKey(1);//是否存在这个key
//... ...</strong>

10、SortedDictionary:

排序字典,依据key进行排序.因为要排序,所以增删改慢,多了一个排序

SortedDictionary<int, string> pairs = new SortedDictionary<int, string>();
//根据key依次排序
pairs.Add(1, "object1");
pairs.Add(2, "object2");
pairs.Add(3, "object3");
pairs.Add(4, "object4");
SortedList:

也是key,value形式,自动排序.不能重复添加,key重复会报错

IComparer comparer 自定义对象要排序,就用这个指定
在这里插入图片描述

SortedList sortedList = new SortedList();
sortedList.Add("2", "1");
var keyList = sortedList.GetKeyList();
var valueList = sortedList.GetValueList();
sortedList.TrimToSize();//用于最小化集合的内存开销
sortedList.Remove("1");//根据key值移除
sortedList.RemoveAt(0);//根据索引移除
sortedList.Clear();//移除所有元素
字典集合线程不安全(非线程安全),这块内存多个线程都可以改
ConcurrentQueue 线程安全版本的Queue
ConcurrentStack 线程安全版本的Stack
ConcurrentBag (List集合是非线程安全的)ConcurrentBag线程安全版本的对象集合
ConcurrentDictionary 线程安全版本的Dictionary
BlockingCollection 线程安全集合

ArrayList和List都实现了IList接口,可以通过索引访问元素,像链表这种就不可以通过索引访问元素.

在这里插入图片描述
但是链表这种集合继承了ICollection类型的接口,因此可获得集合的长度(长度不定的集合都继承了ICollection接口)
在这里插入图片描述

IEnumerable\ICollection\IList\IQueryable
接口是标识功能的.不同的接口拆开就是为了接口隔离.实现不同的接口表明这个集合的功能不同.
任何数据集合都实现IEnumerable,IEnumerable为不同的数据结构(各种集合)提供了统一的数据访问方式(foreach)=》迭代器模式

请添加图片描述

C#开发-集合使用和技巧(四)集合中常用的查询方法
海盗Sharp的博客
06-15 281
本篇介绍集合的各种查询方法和使用 主要介绍条件查询Where,单个对象查询First/FirstOrDefault、功能查询All、Any、Count等,结合代码说明和应用场景详细介绍
C# 各种集合
againknow的博客
02-17 1202
C# 各种集合
c#集合类(list,set,dictionary)
最新发布
douyh的专栏
08-05 284
【代码】c#集合类(list,set,dictionary)
C#常用集合的使用
热门推荐
ceclar123的专栏
03-10 5万+
大多数集合都在System.Collections,System.Collections.Generic两个命名空间。其中System.Collections.Generic专门用于泛型集合。 针对特定类型的集合类型位于System.Collections.Specialized;命名空间; 线程安全的集合类位于System.Collections.Concurrent;命名空间。 下面是集
c#中的泛型集合
weixin_44511962的博客
11-18 903
c#中的泛型集合 在应用程序中存储数据最简单的容器是数组,但数组无法满足数据的动态伸缩,为了摆脱这些数组的限制,.net基础类库发布了很多包含集合类的命名空间,集合类的尺寸是动态的,可以在运行时插入或者移除数据项,集合类包括两类: 1.非泛型集合: 主要位于System.Collections命名空间,包括ArraryList,BitArray,Stack,Queue等类,同时System.Col...
C#集合的使用
doukou372833的专栏
09-19 623
C#中的集合接口: IEnumerable IEnumerable ICollection ICollection IDictionary IDictionary IList IList 集合接口的关系 ==========================================================
C# 全网最详尽Linq 常用功能解析,带使用示例 持续更新... 20230706
一个编程的同学
07-10 969
在上述示例中,我们定义了一个自定义的排序规则PersonComparer,它实现了IComparer接口,并根据Person对象的Age属性进行排序。在上述示例中,我们使用OrderByDescending方法对整数数组numbers按照元素的降序进行排序,并将排序后的结果存储在sortedNumbers变量中。返回的结果是一个匿名类型的集合,包含具有相匹配的Id和PersonId的元素。LINQ的ThenBy方法用于对已经进行排序的集合进行进一步排序操作,以添加排序的次要条件。
C#使用xsd文件验证XML格式是否正确的实现方法
08-31
- 《C#常见控件用法教程》:了解并掌握各种UI控件的使用方法。 - 《C#程序设计之线程使用技巧总结》:学习多线程编程,提升程序性能。 - 《WinForm控件用法总结》:熟悉WinForm应用程序中的控件操作。 - 《C#程序...
c# ms chart 控件使用方法汇总 附统计图
05-09
C# MS Chart 控件使用方法汇总 附统计图 MS Chart 控件是 Microsoft 为 .NET 平台提供的一种数据可视化控件,可以用来创建各种类型的图表,如曲线图、柱状图、饼图等。下面是 MS Chart 控件的一些使用方法示例...
C#提取操作word文件方法汇总
10-05
本文将汇总几种主要的C#方法,用于提取和操作Word文件,特别是涉及图片和文字的处理。 首先,我们需要了解.NET Framework提供了一个名为`Microsoft.Office.Interop.Word`的库,它是用于与Word应用程序进行交互的COM...
c#集合用法
rush_peng的博客
12-14 2907
文章目录1. 概述2.非泛型集合3.List\ 泛型集合特点:List\集合方法:参考文献 1. 概述 C# 中的集合一般分为两种,泛型集合和非泛型集合,我一般非泛型集合用的比较少。主要用泛型集合 C# 中的集合主要有这么几种: ArrayList 表示对象的数组,这些对象的大小会根据需要动态增加。 Hashtable 表示根据键的哈希代码进行组织的键/值对的集合。 Queue 表示对象的先进先出 (FIFO) 集合。 Stack 表示对象的后进先出 (LIFO) 集合。 2.非泛型集合 3
c# 集合类型
yige16的博客
10-05 217
IList 继承ICollection和IEnumerable的接口。除此之外还支持根据下标访问(IndexOf(Object))和添加元素(Add(Object))。 具体的构造函数、熟悉、方法在网站中有说明。 https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.ilist?view=netcore-3.1 List类 表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。T指的是列表中元素类型。.
C# 集合类型(常用集合类型整理)
蓝天小僧的博客
06-24 2万+
一、常用集合类型及概念 2. 1)List &amp;amp;amp;amp;amp;amp;amp;lt; T &amp;amp;amp;amp;amp;amp;amp;gt; 泛型的List 类是一个不限长度的集合类型,它内部实际就是一个数组,初始长度是4,每次数组到达限制,就会把现有容量翻倍,它提供用于对集合进行搜索、排序和操作等方法 2)Dictionary &amp;amp;amp;amp;amp;amp;amp;lt; K, V&amp;amp
C#集合用法
极客园地
02-13 826
C#中,集合分为泛型集合和非泛型集合,非泛型集合的接口和类在System.Collections命名空间中,而泛型集合的接口和类在System.Collections.Generic命名空间中。 ArrayList为动态列表,是一个非泛型的线性列表,可以将需要管理的数据添加到这个列表中,然后进行一系列操作。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class s1: Mon
C#进阶之路(八)集合的应用
weixin_33991418的博客
06-03 307
集合是我们编程时候常用的类库,本文主要讨论具体每个类型的区别,每个集合对应的时间复杂度。先上一个时间复杂度图: C#集体类型( Collections in C#)   集合是.NET FCL(Framework Class Library)中很重要的一部分(.net core 中是corefx),也是我们开发当中最常用到的功能之一,几乎是无处不在。俗话说知其然,知其所以然,平常看到IE...
C# 有哪些集合
weixin_30471561的博客
01-04 209
队列【Queue】 //队列:先进先出 /* *增加元素到队列结尾处 *移除队列开始处 */ Queue queue=new Queue(); queue.Enqueue(Object); queue.Dequeue(); 堆栈【stack】 //堆栈:先进后出 /*增加元素到堆栈顶部 *移除堆栈顶部元素 */ Stack stack=new St...
.net集合类的研究--哈希表(二)--HashSet<T>
weixin_30606461的博客
05-09 143
.Net3.5之后出现了HashSet<T>,硬翻译过来就是“哈希集合”,跟“哈希”两字挂钩说明这种集合的内部实现用到了哈希算法,用Reflector工具就可以发现,HashSet<T>和Dictionary<TKey,TValue>使用了相同的存储方式和哈希冲突算法,那么,它跟Dictionary<TKey,TValue>和Hashtable在使用...
C# int数组使用append方法示例
06-02
C# 中,`int` 数组是一种固定长度的数据类型,因此不能像动态列表一样使用 `append()` 方法。不过,您可以使用 `Array.Copy()` 方法将一个数组的元素复制到另一个更大的数组中,从而扩展数组的大小。以下是一个示例: ``` // 创建一个包含3个元素的int数组 int[] arr1 = { 1, 2, 3 }; // 创建一个包含5个元素的int数组 int[] arr2 = new int[5]; // 将arr1的元素复制到arr2中 Array.Copy(arr1, arr2, arr1.Length); // 在arr2的末尾添加一个新的元素 arr2[arr1.Length] = 4; ``` 在上面的示例中,我们创建了一个包含3个元素的 `arr1` 数组和一个包含5个元素的 `arr2` 数组。然后,我们使用 `Array.Copy()` 方法将 `arr1` 的元素复制到 `arr2` 中。最后,我们在 `arr2` 的末尾添加了一个新的元素。此时,`arr2` 的内容为 `{ 1, 2, 3, 0, 4 }`。请注意,我们必须手动指定要添加的新元素的位置,因为 `int` 数组没有 `append()` 方法
103
原创
1249
点赞
6718
收藏
2万+
粉丝
关注
私信
写文章

热门文章

  • C# 关于Invoke(详解) 56854
  • C语言期末大作业-学生成绩管理系统(完整源码+设计报告) 36002
  • CSS字体样式(font)[详细] 29460
  • C语言期末大作业15个(附源码)成绩管理系统、图书馆管理系统、学生打卡系统、超市信息管理系统、学生考勤系统、职工信息管理系统源码、歌曲信息管理系统、超市收款系统等等 26522
  • C#winform 绘图(直线、圆、虚线、矩形等等)总结 19859

分类专栏

  • C# 69篇
  • 自制工具 1篇
  • ai绘图关键词 1篇
  • 项目经验 10篇
  • 毕业设计 3篇
  • C# 经典案例 15篇
  • 便捷软件 1篇
  • My
  • 运动控制 2篇
  • 机器视觉 2篇
  • C++ 1篇
  • halcon 4篇
  • 自定义控件 1篇
  • 软件测试 1篇
  • 前端 1篇
  • C语言 9篇
  • css 2篇
  • 计算机导论 1篇
  • .Net 1篇
  • 软件工程 1篇
  • Python 3篇

最新评论

  • C# winform 下拉框多选,自定义控件(附下载链接)

    头盔程序员: 点击之后需要移到其他位置才能看到勾选,希望博主优化

  • C# winform GDI 绘图总结【详细】

    wolfkill: 适合初学者,可以了解一下

  • C# 关于Invoke(详解)

    沉淀期♬: 写的好详细,学到了

  • C# winform 基于HSMS通信的SECS协议窗体程序及类库源码(附下载链接)

    haifengcode: 这个源码能正常用来对接secs标准的 设备么?

  • 计算机导论期末知识点及试题总结 [近三万字总结 · 全]

    自由的风.: 好像是存储器吧不是储存器吧表情包表情包

最新文章

  • C# 钢琴模拟软件winform(含源码和exe导出软件)
  • C# winform 视觉流程框架小demo附下载链接
  • 根目录下删除所有目标文件工具、根目录下替换行内容工具,exe软件(附下载链接)
2024年20篇
2023年44篇
2022年41篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薪薪代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家商场美陈怎么搭建重庆玻璃钢工艺品雕塑厂家潮汕玻璃钢鸳鸯雕塑江苏玻璃钢雕塑茶几兰州玻璃钢雕塑制作的公司商场玻璃钢玩偶雕塑定制河北开业商场美陈有哪些玻璃钢骆驼雕塑原理新密景观园林玻璃钢卡通雕塑广东超市商场美陈市场价盐城春季商场美陈福建大型商场美陈哪里有庭院玻璃钢花盆眉山玻璃钢造型雕塑抚顺玻璃钢景观雕塑商场美陈需要报城管审批吗湖州小区玻璃钢雕塑定制杭州商场美陈布置租赁光山玻璃钢雕塑厂家卡通玻璃钢雕塑品牌鹤山玻璃钢雕塑定制广东大型商场创意商业美陈怎么做杭州商场美陈道具亳州大型玻璃钢雕塑批发广东公园小品玻璃钢雕塑厂家兰州户外玻璃钢雕塑定制江苏室内玻璃钢花盆淮南大型户外玻璃钢雕塑报价frp玻璃钢花盆价格衡水玻璃钢广场雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化