zoukankan      html  css  js  c++  java
  • [C#]的6种常用集合类大比拼讲解+实例

    一.先来说说数组不足(也可以说集合与数组的区别

    1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的

    2.数组要声明元素的类型,集合类的元素类型却是object.

    3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。

    4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!

     

    二.下面讲述6种常用集合

    1.ArrayList类

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    namespace ConsoleApplication1
    {
        
    class Program
        
    {
            
    static void Main(string[] args)
            
    {
                ArrayList al 
    = new ArrayList();
                al.Add(
    100);//单个添加
                foreach (int number in new int[6937248 })
                
    {
                    al.Add(number);
    //集体添加方法一//清清月儿 http://blog.csdn.net/21aspnet/
                }

                
    int[] number2 = new int[211,12 };
                al.AddRange(number2);
    //集体添加方法二
                al.Remove(3);//移除值为3的
                al.RemoveAt(3);//移除第3个
                ArrayList al2 = new ArrayList(al.GetRange(13));//新ArrayList只取旧ArrayList一部份


                Console.WriteLine(
    "遍历方法一:");
                
    foreach (int i in al)//不要强制转换
                {
                    Console.WriteLine(i);
    //遍历方法一
                }


                Console.WriteLine(
    "遍历方法二:");
                
    for (int i = 0; i != al2.Count; i++)//数组是length
                {
                    
    int number = (int)al2[i];//一定要强制转换
                    Console.WriteLine(number);//遍历方法二

                }

            }

        }

    }

    2.Stack类

    栈,后进先出。push方法入栈,pop方法出栈。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    namespace ConsoleApplication1
    {
        
    class Program
        
    {
            
    static void Main(string[] args)
            
    {
                Stack sk 
    = new Stack();
                Stack sk2 
    = new Stack();
                
    foreach (int i in new int[41234 })
                
    {
                    sk.Push(i);
    //填充
                    sk2.Push(i);
                }

                
                
    foreach (int i in sk)
                
    {
                    Console.WriteLine(i);
    //遍历
                }


                sk.Pop();
                Console.WriteLine(
    "Pop");
                
    foreach (int i in sk)
                
    {
                    Console.WriteLine(i);
                }

                
                sk2.Peek();
    //弹出最后一项不删除//清清月儿 http://blog.csdn.net/21aspnet/
                Console.WriteLine("Peek");
                
    foreach (int i in sk2)
                
    {
                    Console.WriteLine(i);
                }


                
    while (sk2.Count != 0)
                
    {
                    
    int i = (int)sk2.Pop();//清空
                    sk2.Pop();//清空
                }

                Console.WriteLine(
    "清空");
                
    foreach (int i in sk2)
                
    {
                    Console.WriteLine(i);
                }

            }

        }

    }

    3.Queue类

    队列,先进先出。enqueue方法入队列,dequeue方法出队列。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    namespace ConsoleApplication1
    {
        
    class Program
        
    {
            
    static void Main(string[] args)
            
    {
                Queue qu 
    = new Queue();
                Queue qu2 
    = new Queue();
                
    foreach (int i in new int[41234 })
                
    {
                    qu.Enqueue(i);
    //填充
                    qu2.Enqueue(i);
                }

                
                
    foreach (int i in qu)
                
    {
                    Console.WriteLine(i);
    //遍历
                }


                qu.Dequeue();
                Console.WriteLine(
    "Dequeue");
                
    foreach (int i in qu)
                
    {
                    Console.WriteLine(i);
                }

                
                qu2.Peek();
    //弹出最后一项不删除
                Console.WriteLine("Peek");
                
    foreach (int i in qu2)
                
    {
                    Console.WriteLine(i);
                }


                
    while (qu2.Count != 0)
                
    {
                    
    int i = (int)qu2.Dequeue();//清空
                    qu2.Dequeue();//清空
                }

                Console.WriteLine(
    "清空");
                
    foreach (int i in qu2)
                
    {
                    Console.WriteLine(i);
                }

            }

        }

    }

    4.Hashtable类

    哈希表,名-值对。 类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。GetHashCode() 方法返回一个int型数据,使用这个键的值生成该int型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数据项在字典中存储的位置。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    namespace ConsoleApplication1
    {
        
    class Program
        
    {
            
    public static void Main()
            
    {

                
    // Creates and initializes a new Hashtable.
                Hashtable myHT = new Hashtable();
                myHT.Add(
    "one""The");
                myHT.Add(
    "two""quick");
                myHT.Add(
    "three""brown");
                myHT.Add(
    "four""fox");

                
    // Displays the Hashtable.//清清月儿 http://blog.csdn.net/21aspnet/
                Console.WriteLine("The Hashtable contains the following:");
                PrintKeysAndValues(myHT);
            }



            
    public static void PrintKeysAndValues(Hashtable myHT)
            
    {
                
    foreach (string s in myHT.Keys)
                    Console.WriteLine(s);

                Console.WriteLine(
    " -KEY- -VALUE-");
                
    foreach (DictionaryEntry de in myHT)
                    Console.WriteLine(
    " {0}: {1}", de.Key, de.Value);
                Console.WriteLine();
            }

        }

    }

    5.SortedList类

    与哈希表类似,区别在于SortedList中的Key数组排好序的。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    namespace ConsoleApplication1
    {
        
    class Program
        
    {
            
    public static void Main()
            
    {

                SortedList sl 
    = new SortedList();
                sl[
    "c"= 41;
                sl[
    "a"= 42;
                sl[
    "d"= 11;
                sl[
    "b"= 13;

                
    foreach (DictionaryEntry element in sl)
                
    {
                    
    string s = (string)element.Key;
                    
    int i = (int)element.Value;
                    Console.WriteLine(
    "{0},{1}",s,i);
                }

            }

        }

    }

    6.NameValueCollection类

    官方给NameValueCollection定义为特殊集合一类,在System.Collections.Specialized下。

    System.Collections.Specialized下还有HybridDicionary类,建议少于10个元素用HybridDicionary,当元素增加会自动转为HashTable。

    System.Collections.Specialized下还有HybridDicionary类,字符串集合。

    System.Collections.Specialized下还有其他类大家可以各取所需!

    言归正转主要说NameValueCollection,HashTable 和 NameValueCollection很类似但是他们还是有区别的,HashTable 的KEY是唯一性,而NameValueCollection则不唯一

    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.Collections.Specialized;
    namespace ConsoleApplication1
    {

        
    class Program
        
    {

            
    static void Main(string[] args)
            
    {
                System.Collections.Hashtable ht 
    = new System.Collections.Hashtable();
                ht.Add(
    "DdpMDisplaySeq".Trim(), "Display Sequence".Trim());
                ht.Add(
    "DdpMNameChi".Trim(), "Name (Chinese)".Trim());
                ht.Add(
    "DdpMNameEng".Trim(), "Name (English)".Trim());
                ht.Add(
    "Comment".Trim(), "Comment".Trim());
                ht.Add(
    "DdpMMarketCode".Trim(), "Market Code".Trim());
                
    foreach (object key in ht.Keys)
                
    {
                    Console.WriteLine(
    "{0}/{1}    {2},{3}", key, ht[key], key.GetHashCode(), ht[key].GetHashCode());
                }

                Console.WriteLine(
    " ");//清清月儿 http://blog.csdn.net/21aspnet/
                NameValueCollection myCol 
    = new NameValueCollection();
                myCol.Add(
    "DdpMDisplaySeq".Trim(), "Display Sequence".Trim());
                myCol.Add(
    "DdpMNameChi".Trim(), "Name (Chinese)".Trim());
                myCol.Add(
    "DdpMNameChi".Trim(), "Name (English)".Trim());
                myCol.Add(
    "Comment".Trim(), "Comment".Trim());
                myCol.Add(
    "DdpMMarketCode".Trim(), "Market Code".Trim());
                
    foreach (string key in myCol.Keys)
                
    {
                    Console.WriteLine(
    "{0}/{1} {2},{3}", key, myCol[key], key.GetHashCode(), myCol[key].GetHashCode());
                }


            }


        }



    }




  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/wenrenhua08/p/3993651.html
Copyright © 2011-2022 走看看