C#常用集合的使用(转载)

大多数集合都在System.Collections,System.Collections.Generic两个命名空间。其中System.Collections.Generic专门用于泛型集合。

针对特定类型的集合类型位于System.Collections.Specialized;命名空间;

线程安全的集合类位于System.Collections.Concurrent;命名空间。

下面是集合和列表实现的接口如下:

一、列表

    [Serializable]
    [DebuggerTypeProxy(typeof(Mscorlib_CollectionDebugView<>))]
    [DebuggerDisplay("Count = {Count}")]
    public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

从这个可以看出,泛型集合List<T>实现了这么多接口,具体接口的信息可以通过工具查看。

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            List<String> list = new List<string>();
            list.Add("张三");
            list.Add("李四");
            list.Add("王五");
            list.Add("田六");
            list.Add("赵七");

            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine("for循环:" + i.ToString() + "=" + list[i]);
            }

            list.RemoveAt(0);
            foreach (String item in list)
            {
                Console.WriteLine("foreach迭代:" + item);
            }
            list.AddRange(new String[] { "Hello1", "Hello2", "Hello3" });

            list.ForEach(Print);

            Console.Read();
        }

        private static void Print(String item)
        {
            Console.WriteLine("ForEach:" + item);
        }
    }

}

二、队列

队列先进先出,一头进一头出,用Queue<T>实现

    [Serializable]
    [DebuggerTypeProxy(typeof(System_QueueDebugView<>))]
    [ComVisible(false)]
    [DebuggerDisplay("Count = {Count}")]
    public class Queue<T> : IEnumerable<T>, ICollection, IEnumerable

可以看出队列实现了集合的接口,迭代的接口

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            Queue<String> queue = new Queue<string>();
            //进队
            queue.Enqueue("张三");
            queue.Enqueue("李四");
            queue.Enqueue("王五");
            queue.Enqueue("田六");
            queue.Enqueue("赵七");

            foreach (String item in queue)
            {
                Console.WriteLine("foreach迭代:" + item);
            }

            //出队
            while (queue.Count > 0)
            {
                Console.WriteLine("出队:" + queue.Dequeue());
            }

            Console.Read();
        }
    }
}

三、栈

栈:从同一边先进后出,用Stack<T>实现

 [DebuggerDisplay("Count = {Count}")]
    [DebuggerTypeProxy(typeof(System_StackDebugView<>))]
    [ComVisible(false)]
    public class Stack<T> : IEnumerable<T>, ICollection, IEnumerable

栈也是实现了集合接口与迭代接口的

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            Stack<String> stack = new Stack<string>();
            //进栈
            stack.Push("张三");
            stack.Push("李四");
            stack.Push("王五");
            stack.Push("田六");
            stack.Push("赵七");

            foreach (String item in stack)
            {
                Console.WriteLine("foreach迭代:" + item);
            }

            //出栈
            while (stack.Count > 0)
            {
                Console.WriteLine("出栈:" + stack.Pop());
            }

            Console.Read();
        }
    }
}

四、链表

LinkedList是一个双向链表,链表有个有点,就是在链表中间插入、删除元素很快,但是查找中间与末尾的元素很慢,需要一个节点一个节点的去找。

    [Serializable]
    [DebuggerTypeProxy(typeof(System_CollectionDebugView<>))]
    [DebuggerDisplay("Count = {Count}")]
    [ComVisible(false)]
    public class LinkedList<T> : ICollection<T>, IEnumerable<T>, ICollection, IEnumerable, ISerializable, IDeserializationCallback

由此可见链表也是有集合的特性的,可以迭代,同时还有链表的特性

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            LinkedList<String> lList = new LinkedList<string>();
            LinkedListNode<String> node = new LinkedListNode<string>("root");
            lList.AddFirst(node);
            node = lList.AddAfter(node, "张三");
            node = lList.AddAfter(node, "李四");
            node = lList.AddAfter(node, "王五");
            node = lList.AddAfter(node, "田六");
            node = lList.AddAfter(node, "赵七");

            foreach (String item in lList)
            {
                Console.WriteLine("foreach迭代:" + item);
            }

            node = lList.First;
            Console.WriteLine("第一个元素:" + node.Value);
            node = lList.Last;
            Console.WriteLine("最后一个元素:" + node.Value);
            Console.Read();
        }
    }
}

五、有序列表

SortedList采用键-值对存储,键不能重复,并且会根据key进行排序

    [Serializable]
    [DebuggerTypeProxy(typeof(System_DictionaryDebugView<,>))]
    [DebuggerDisplay("Count = {Count}")]
    [ComVisible(false)]
    public class SortedList<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IDictionary, ICollection, IEnumerable

可以看出SortedList不仅具有字典的特性,还有集合,迭代的功能

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            //Key必须唯一,如果不唯一可以考虑Lookup<TKey,TElement>
            SortedList<int, String> sList = new SortedList<int, string>();
            sList.Add(100, "张三");
            sList.Add(21, "李四");
            sList.Add(13, "王五");
            sList.Add(44, "田六");
            sList.Add(35, "赵七");

            foreach (KeyValuePair<int, String> item in sList)
            {
                Console.WriteLine("key=" + item.Key.ToString() + ";value=" + item.Value);
            }

            Console.Read();
        }
    }
}

六、字典

字典是很复杂的数据结构,允许通过key来查找值,字典可以自由添加、删除元素,没有集合由于移动元素导致的开销。

[Serializable]
    [DebuggerTypeProxy(typeof(Mscorlib_DictionaryDebugView<,>))]
    [DebuggerDisplay("Count = {Count}")]
    [ComVisible(false)]
    public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback

可以看出字典也具有集合的特性,可以迭代

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            //Key必须唯一
            Dictionary<int, String> dict = new Dictionary<int, string>();
            dict.Add(11, "张三");
            dict.Add(1, "李四");
            dict.Add(2, "王五");
            dict.Add(16, "田六");
            dict.Add(12, "赵七");

            foreach (KeyValuePair<int, String> item in dict)
            {
                Console.WriteLine("key=" + item.Key.ToString() + ";value=" + item.Value);
            }

            Console.Read();
        }
    }
}

说到字典,顺便谈一下有序字典,与有序列表对应;SortedDictionary,SortedList,SortedSet

会根据Key进行排序

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            //Key必须唯一
            SortedDictionary<int, String> dict = new SortedDictionary<int, string>();
            dict.Add(11, "张三");
            dict.Add(1, "李四");
            dict.Add(2, "王五");
            dict.Add(16, "田六");
            dict.Add(12, "赵七");

            foreach (KeyValuePair<int, String> item in dict)
            {
                Console.WriteLine("key=" + item.Key.ToString() + ";value=" + item.Value);
            }

            Console.Read();
        }
    }
}

七、集

集(Set):包含不重复元素,常用HashSet,SortedSet

 [Serializable]
    [DebuggerDisplay("Count = {Count}")]
    [DebuggerTypeProxy(typeof(HashSetDebugView<>))]
    public class HashSet<T> : ISerializable, IDeserializationCallback, ISet<T>, ICollection<T>, IEnumerable<T>, IEnumerable
 [Serializable]
    [DebuggerTypeProxy(typeof(SortedSetDebugView<>))]
    [DebuggerDisplay("Count = {Count}")]
    public class SortedSet<T> : ISet<T>, ICollection<T>, IEnumerable<T>, ICollection, IEnumerable, ISerializable, IDeserializationCallback
using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            HashSet<String> hSet = new HashSet<string>();
            hSet.Add("张三");
            hSet.Add("李四");
            hSet.Add("王五");
            hSet.Add("田六");
            hSet.Add("赵七");

            foreach (String item in hSet)
            {
                Console.WriteLine("foreach迭代:" + item);
            }

            Console.Read();
        }
    }
}
using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            SortedSet<String> hSet = new SortedSet<string>();
            hSet.Add("张三");
            hSet.Add("李四");
            hSet.Add("王五");
            hSet.Add("田六");
            hSet.Add("赵七");

            foreach (String item in hSet)
            {
                Console.WriteLine("foreach迭代:" + item);
            }

            Console.Read();
        }
    }
}

性能比较:

---------------------------------------------------------------------------------------------------------------------------

时间: 2024-08-29 07:34:25

C#常用集合的使用(转载)的相关文章

.NET基础 (09)常用集合和泛型

常用集合和泛型1 int[]是引用类型还是值类型2 数组之间如何进行转换3 解释泛型的基本原理4 什么是泛型的主要约束和次要约束 常用集合和泛型1 int[]是引用类型还是值类型 数组类型是一族类型,它们都继承自System.Array,而System.Array又继承自System.Object.所有数组的类型都是引用类型. 引用类型的数组和值类型的数组的内存分配: 2 数组之间如何进行转换 数组类型在符合条件的情况下可以进行隐式地转换,条件包括:数组维数必须相同:目标项目类型和源项目类型必须

比较Java中几个常用集合添加元素的效率

初始化需要进行比较的集合,统一增加10万个元素,获取整个过程的执行时间. 1.List集合增加元素 1 private static void testList() { 2 3 List<Integer> list = new ArrayList<Integer>(); 4 5 long startTime = System.currentTimeMillis(); // 获取开始时间 6 for (int i = 0; i < 100000; i++) { 7 8 list

Mysql常用命令行大全——转载

转载地址:http://www.blogjava.net/supperchen/archive/2012/10/11/389340.html 第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是: mysql> 注意,如果是连接到另外的机器上,则

【总结】Java常用集合接口与集合类

目录 常见集合接口概述 Collection<E> Map<K,V> Collection接口 Map接口 补充内容 ? 常见集合接口概述 Java中包含许多集合接口.其中比较常见的主要是Collection接口和Map接口: 1.1 Collection<E> 由单元素组成的集合.其比较常见的直接子接口是List.Set和Queue接口. ? ? ? ? 表1.1 Collection<e>接口常用方法 编号 方法原型 解释 备注 1 boolean?ad

JAVA集合框架中的常用集合及其特点、适用场景、实现原理简介

JJDK提供了大量优秀的集合实现供开发者使用,合格的程序员必须要能够通过功能场景和性能需求选用最合适的集合,这就要求开发者必须熟悉Java的常用集合类.本文将就Java Collections Framework中常用的集合及其特点.适用场景.实现原理进行介绍,供学习者参考.当然,要真正深入理解Java的集合实现,还是要推荐去阅读JDK的源码. Java提供的众多集合类由两大接口衍生而来:Collection接口和Map接口 Collection接口 Collection接口定义了一个包含一批对

C#常用集合

数组的缺点:长度固定.因此引入集合的使用. 注:泛型集合更安全,性能更高. 常用集合 对应泛型 ①动态数组ArrayList    List<T> 常用方法属性:Add  Clear  Contains  IndexOf  Insert  Remove  Sort ②哈希表Hashtable   Dictionary<TKey,TValue> 常用方法属性:Add  Clear  ContainsKey  ContainsValue  Remove ③排序列表SortedList 

c++STL之常用集合算法

set_intersection:求两个容器的交集 set_union:求两个集合的并集 set_difference:求两个集合的差集 1.set_intersection #include<iostream> using namespace std; #include <vector> #include <algorithm> //常用集合算法 set_intersection void myPrint(int val) { cout << val &l

浅谈JAVA集合框架(转载)_常用的Vector和HashMap

原作者滴着:http://www.cnblogs.com/eflylab/archive/2007/01/20/625237.html Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection classes).集合在java中非常重要,在讨论之前,先来看几个面试中的经典问题. 1 Collection 和 Collections的区别. 2 List, Set, Map是否继承自

Java 常用集合操作

List接口是Collection的子接口,用于定义线性表结构,其中ArrayList可以理解为一个动态数组,而LinkedList可以理解为一个链表 常用操作: 插入和删除操作: void add(int index,E element): 将给定的元素插入到指定位置,原位置及后续元素都顺序向后移动. E remove(int index): 删除给定位置的元素,并将被删除的元素返回. get和set方法: List除了继承Collection定义的方法外,还根据其线性表的数据结构定义了一系列