• [转载].net 集合类初步认识


     

    先来说说数组的不足(也可以说集合与数组的区别):(这是我看得别人的这段)
    1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的.
    2.数组要声明元素的类型,集合类的元素类型却是object.
    3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。
    4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问.
    此次试验总结:
    1.以键值对形式存在的:
     HashTable,key必须唯一,不唯一异常
     NameValueCollection,key可以不唯一,则通过key得到和这个key关联的所有value
     SortedList,key唯一,但是重复插入相同key,old value被new value覆盖,也就是降频的key唯一
      以单object形式存在的:Arraylist,Queue,Stack
    2.支持下标访问的:
     HashTable[key],得到key对应的value
     NameValueCollection[ksy],得到key对应的values们
     SortedList[ksy],得到key对应的value
      支持索引下标访问的:
     Arraylist[i],得到i位置的object ,下标越界出异常
      不支持下标访问的:
       Queue,Stack
    测试代码:

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

     8    class Program
     9    {
    10        static void Main(string[] args)
    11        {
    12            Hashtable ht = new Hashtable();//15重载
    13            ht.Add("one",1);//add 方法添加元素 必须符合 key:value 的形式 kay唯一,不唯一异常          
    14            ht.Add("four"new int[] {1,2,3});
    15            ht.Add("two""2");
    16            ht.Add("three""three");
    17            PrintKeyAndValues(ht);
    18            Console.WriteLine("hashtable is count {0}",ht.Count);            
    19            //ht.Remove("two");//通过key移除一个元素
    20            //Console.WriteLine("ht.Remove('two') hashtable is count {0},now key_two value is {1}", ht.Count,ht["two"]);//下标访问方法,参数key得到value 或者设置value            
    21            
    22            ///hashtable排序
    23            //ArrayList list = new ArrayList(ht.Keys);
    24            //list.Sort();
    25            PrintKeyAndValues(ht);
    26            Console.ReadLine();
    27        }

    28        public static void PrintKeyAndValues(Hashtable ht)
    29        {
    30            foreach (DictionaryEntry dictory in ht)//dictionaryentry 基于key value的基元
    31            {
    32                Console.WriteLine("key:{0},value:{1}",dictory.Key,dictory.Value);
    33            }

    34            foreach (string key in ht.Keys)//遍历
    35            {
    36                Console.WriteLine(key);
    37            }
                
    38        }

    39    }
     1/// <summary>
     2    /// HashTable 和 NameValueCollection很类似但是他们还是有区别的,
     3    /// HashTable 的KEY是唯一性,而NameValueCollection则不唯一!
     4    /// </summary>

     5    class Program
     6    {
     7        static void Main(string[] args)
     8        {
     9            //Hashtable 中的key唯一,重复会出异常
    10            System.Collections.Hashtable ht = new System.Collections.Hashtable();
    11            ht.Add("DdpMDisplaySeq".Trim(), "Display Sequence".Trim());
    12            ht.Add("DdpMNameChi".Trim(), "Name (Chinese)".Trim());
    13            ht.Add("DdpMNameEng".Trim(), "Name (English)".Trim());
    14            ht.Add("Comment".Trim(), "Comment".Trim());
    15            ht.Add("DdpMMarketCode".Trim(), "Market Code".Trim());
    16            foreach (object key in ht.Keys)
    17            {
    18                Console.WriteLine("{0}/{1}    {2},{3}", key, ht[key], key.GetHashCode(), ht[key].GetHashCode());
    19            }

    20            Console.WriteLine(" ");
    21
    22            NameValueCollection myCol = new NameValueCollection();
    23            myCol.Add("DdpMDisplaySeq".Trim(), "Display Sequence".Trim());
    24            myCol.Add("DdpMNameChi".Trim(), "Name (Chinese)".Trim());
    25            myCol.Add("DdpMNameChi".Trim(), "Name (English)".Trim());
    26            myCol.Add("Comment".Trim(), "Comment".Trim());
    27            myCol.Add("DdpMMarketCode".Trim(), "Market Code".Trim());
    28            foreach (string key in myCol.Keys)//如果一个key有多个value,那么myCol[key]会得到所有的value
    29            {
    30                Console.WriteLine("{0}/{1} {2},{3}", key, myCol[key], key.GetHashCode(), myCol[key].GetHashCode());
    31            }

    32            myCol.Set("hello","world");//set 和 add 效果相同
    33            //myCol.Remove(key); 移除
    34            //myCol.Get() 2重载 参数 index 参数keyname 
    35            Console.ReadLine();
    36        }

    37    }
     1/// <summary>
     2    /// queue 队列用例 队列,先进先出。enqueue方法入队列,dequeue方法出队列。
     3    /// </summary>

     4    class Program
     5    {
     6        static void Main(string[] args)
     7        {
     8            Queue qu1 = new Queue();
     9            Queue qu2 = new Queue(6);
    10
    11            foreach (int i in new int[5]{1,2,3,4,5})
    12            {
    13                qu1.Enqueue(i);//enqueue 方法添加元素
    14                qu2.Enqueue(i);
    15            }

    16
    17            foreach (object var in qu1)//遍历 不提供下标引用
    18            {
    19                Console.Write(var);
    20            }

    21            Console.WriteLine();
    22            object o1 = qu1.Dequeue();//弹出队列开始处的对象,永久弹出,删除了
    23            Console.WriteLine("qu1 contains o1 {0}",qu1.Contains(o1));
    24            Console.WriteLine();
    25            object o2 = qu2.Peek();//弹出队列开始处的对象
    26            Console.WriteLine("qu2 contains o1 {0}",qu2.Contains(o2));
    27
    28            Console.WriteLine("qu2 count is {0}",qu2.Count);
    29            qu2.Enqueue("A");
    30            qu2.Enqueue("B");//添加元素,count超过初始值 +1
    31            Console.WriteLine("qu2 count is {0}", qu2.Count);
    32            Console.ReadLine();
    33        }

    34    }
     1/// <summary>
     2    /// 哈希表类似,区别在于SortedList中的Key数组排好序的
     3    /// </summary>

     4    class Program
     5    {
     6        static void Main(string[] args)
     7        {
     8            SortedList list = new SortedList(4);//6重载实现
     9            list.Add("one",1);//添加元素的两种方法
    10            list["zhang"= 2;
    11            list["three"]=3;
    12            list["four"= "this";
    13            list["four"= "this1";//重复key this1 覆盖掉this 不出异常
    14            Console.WriteLine("list is capcity {0}", list.Capacity);//容量 默认16
    15            Console.WriteLine("list is count {0}", list.Count);//实际内容大小
    16            
    17            list.Add("five",1);
    18            Console.WriteLine("add one element");
    19            Console.WriteLine("list is capcity {0}", list.Capacity);
    20            Console.WriteLine("list is count {0}", list.Count);
    21            
    22            foreach (DictionaryEntry dictionary in list)//遍历
    23            {
    24                Console.WriteLine("key is {0},value is {1}",dictionary.Key,dictionary.Value);
    25            }

    26
    27            Console.WriteLine("包含key one 吗?{0}",list.ContainsKey("one"));
    28            Console.WriteLine("包含key zz 吗?{0}", list.ContainsKey("zzz"));
    29            Console.WriteLine("包含value 1 吗?{0}", list.ContainsValue(1));
    30            Console.WriteLine("包含value 5 吗?{0}", list.ContainsValue(5));
    31
    32            Console.ReadLine();
    33        }

    34    }
     1/// <summary>
     2    /// stack 栈,后进先出。push方法入栈,pop方法出栈。content is object
     3    /// </summary>

     4    class Program
     5    {
     6        static void Main(string[] args)
     7        {
     8            Stack sk1 = new Stack();
     9            Stack sk2 = new Stack(6);//设置初始大小
    10
    11            foreach (int i in new int[41234 })
    12            {
    13                sk1.Push(i);//push 方法添加一个元素
    14                sk2.Push(i);
    15            }

    16            //Console.WriteLine(sk1[i]);栈不提供下标访问元素的功能
    17            foreach (object var in sk1)//遍历栈
    18            {
    19                Console.WriteLine(var);
    20            }

    21            
    22            object o1=sk1.Pop();//最顶层的对象被弹出,彻底删除
    23            Console.WriteLine("Pop is {0}",o1);
    24            Console.WriteLine("01 还在吗?{0}",sk1.Contains(o1));//判断是否存在一个object,可以给一个确定的值 eg:1
    25            
    26            object o2=sk2.Peek();//弹出最顶层对象,但是删除
    27            Console.WriteLine("Peek is {0}", o2);          
    28            Console.WriteLine("02 还在吗?{0}",sk2.Contains(o2));
    29            
    30            Console.WriteLine("sk2 count now is {0}", sk2.Count);
    31            sk2.Push("a");
    32            sk2.Push("b");
    33            sk2.Push("c");//测试初始栈大小被改变,增加1不会翻倍,栈没有容量只有count
    34            Console.WriteLine("sk2 count now is {0}",sk2.Count);
    35            
    36            while (sk2.Count != 0)//清空栈的方法
    37            {
    38                sk2.Pop();
    39            }

    40            Console.WriteLine("sk2 count now is {0}", sk2.Count);
    41            Console.ReadLine();
    42        }

    43    }
     1/// <summary>
     2    /// arraylist demo
     3    /// </summary>

     4    class Program
     5    {
     6        static void Main(string[] args)
     7        {
     8            ///arraylist集合内容都是object 可以添加任何内容
     9            ArrayList list = new ArrayList();//new ArrayList(10)初始化大小,默认16,容量满后,容量是当前容量的两倍
    10            list.Add("A");//单个添加元素
    11            foreach (int num in new int[] 12345 })
    12            {
    13                list.Add(num);
    14            }

    15            string[] arrStr = new string[3];
    16            arrStr[0= "b";
    17            arrStr[1= "c";
    18            arrStr[2= "d";
    19            list.AddRange(arrStr);//添加一组元素
    20            foreach (object obj in list)
    21            {
    22                Console.Write(obj.ToString());
    23            }

    24            list.Remove("A");//移除一个特定元素             
    25            list.RemoveAt(1);//移除特定位置的元素
    26            list.RemoveRange(3,2);//移除一批元素,开始位置,移除个数
    27            Console.WriteLine();
    28            foreach (object obj in list)//遍历方法一
    29            {
    30                Console.Write(obj.ToString());
    31            }

    32            Console.WriteLine();
    33            for (int i = 0; i < list.Count; i++)//遍历方法二
    34            {
    35                Console.Write(list[i]);//也可以使用下标,很像数组阿
    36            }

    37            Console.WriteLine();
    38            ArrayList al2 = new ArrayList(list.GetRange(13));//创建arrlist的另一种方法,初始化一个组给他
    39            for (int i = 0; i < al2.Count; i++)
    40            {
    41                Console.Write(al2[i]);
    42            }

    43            Console.WriteLine("list 可包含多少元素{0}",list.Capacity);//list容量
    44            Console.WriteLine("list 实际包含多少元素{0}", list.Count);//list实际包含元素个数
    45            Console.ReadLine();
    46        }

    47    }

    作者: 和时间赛跑呢
  • 相关阅读:
    day3-python之函数进阶(三)
    day3-python之函数初识(二)
    day3-python之文件操作(一)
    tomcat
    集群
    nginx
    nginx--zabbix监控status waiting
    zabbix监控之mysql主从状态&mysql主从延迟
    zabbix监控之进程&日志监控
    zabbix监控流程(监控linux上某个文件是否有改动)
  • 原文地址:https://www.cnblogs.com/leadwit/p/1271586.html
Copyright © 2020-2023  润新知