zoukankan      html  css  js  c++  java
  • (15)C#集合

    http://blog.csdn.net/hcw_peter/article/details/3980723

    集合分为非泛型集合泛型集合 ,泛型集合可以指定放入集合中的类型。

    一、非泛性集合

     引用命名空间

    using System.Collections;

     ArrayList类

    一个动态可变数组,

               ArrayList aList = new ArrayList();
                //将对象添加到 ArrayList 的结尾处
                aList.Add("aaa");
                aList.Add("bbb");
                aList.Add("ddd");
                aList.Add("eee");
    
                //获取 ArrayList 中实际包含的元素数
                Console.WriteLine("获取 ArrayList 中实际包含的元素数");
                int i = aList.Count;
                Console.WriteLine("alist现有" + i + "个元素");
    
                //通过索引下标获取元素值
                Console.WriteLine("通过索引下标获取元素值");
                object obj = aList[1];           
                Console.WriteLine(obj);
    
                //判断是否包含指定元素,返回布尔值
                Console.WriteLine("判断是否包含指定元素,返回布尔值");
                bool b = aList.Contains("aaa");
                Console.WriteLine("是否包含此元素:"+b);
    
                //将元素插入到指定索引处
                Console.WriteLine("将元素插入到指定索引处");
                aList.Insert(2, "ccc");
                Console.WriteLine(aList[1]);
                
                //遍历aList
                Console.WriteLine("遍历aList");
                foreach (var a in aList)
                {
                    Console.Write("遍历aList=" + a + ",");
                }
                Console.WriteLine("");
    
                //将元素顺序反转
                Console.WriteLine("将元素顺序反转");
                aList.Reverse();
                foreach (var a in aList)
                {
                    Console.Write("遍历aList=" + a + ",");
                }
                Console.WriteLine("");
    
                //将指定范围中的元素反转
                Console.WriteLine("将指定范围中的元素反转,反转从1索引开始反转4个元素");
                aList.Reverse(1, 4);
                foreach (var a in aList)
                {
                    Console.Write("遍历aList=" + a + ",");
                }
                Console.WriteLine("");
    
                //排序
                Console.WriteLine("排序");
                aList.Sort();
                foreach (var a in aList)
                {
                    Console.Write("遍历aList=" + a + ",");
                }
                Console.WriteLine("");
    
                //移除指定元素,如果没有此元素不会报错
                Console.WriteLine("移除指定元素,如果没有此元素不会报错");
                aList.Remove("eee");
                foreach (var a in aList)
                {
                    Console.Write("遍历aList=" + a + ",");
                }
                Console.WriteLine("");
    
                //移除指定下标元素
                Console.WriteLine("移除指定下标元素");
                aList.RemoveAt(0);
                foreach (var a in aList)
                {
                    Console.Write("遍历aList=" + a + ",");
                }
                Console.WriteLine("");
    
                //移除指定范围元素
                Console.WriteLine("移除指定下标元素,从0索引开始移除1个元素");
                aList.RemoveRange(0,1);
                foreach (var a in aList)
                {
                    Console.Write("遍历aList=" + a + ",");
                }
                Console.WriteLine("");
    
                //清除所有元素
                aList.Clear();
                Console.WriteLine("alist现有" + aList.Count + "个元素");
                Console.ReadKey();
    //从目标数组的开头开始,将整个 ArrayList 复制到兼容的一维 Array
    CopyTo(Array)
    //从目标数组的指定索引处开始将整个 ArrayList 复制到兼容的一维 Array
    CopyTo(Array, Int32)

     Hashtable 类

     存储一组键值对,同过键快速查找对应的值

    //获取包含在 Hashtable 中的键/值对的数目
    int count = htable.Count;
    //从 Hashtable 中移除带有指定键的元素
    htable.Remove(3);
    //从 Hashtable 中移除所有元素。
    htable.Clear();
    //确定 Hashtable 是否包含特定键
    bool b1=htable.Contains(3);
    //确定 Hashtable 是否包含特定键
    bool b2=htable.ContainsKey(3);
    //确定 Hashtable 是否包含特定值
    bool b3=htable.ContainsValue("");
    //遍历htable.Keys,或者htable.Values
    foreach (object o in htable.Values)
    {
        Console.WriteLine(o); ;
    }
     //遍历哈希表只能用foreach来遍历,因为Hashtable不能用索引访问
    foreach (DictionaryEntry ht in htable)
    {
        Console.WriteLine(ht.Key);  //de.Key对应于keyvalue键值对key   
        Console.WriteLine(ht.Value);  //de.Key对应于keyvalue键值对value  
    }

    Queue

     Queue队列就是先进先出。它并没有实现 IList,ICollection。所以它不能按索引访问元素,不能使用Add和Remove。下面是 Queue的一些方法和属性

      Enqueue():在队列的末端添加元素

      Dequeue():在队列的头部读取和删除一个元素,注意,这里读取元素的同时也删除了这个元素。如果队列中不再有任何元素。就抛出异常

      Peek():在队列的头读取一个元素,但是不删除它

      Count:返回队列中的元素个数

      TrimExcess():重新设置队列的容量,因为调用Dequeue方法读取删除元素后不会重新设置队列的容量。

      Contains():确定某个元素是否在队列中

      CopyTo():把元素队列复制到一个已有的数组中

      ToArray():返回一个包含元素的新数组

    二、泛型集合

    using System.Collections.Generic;

    List<T> 类

    (1)在决定使用IList<T> 还是使用ArrayList类(两者具有类似的功能)时,记住IList<T> 类在大多数情况下执行得更好并且是类型安全的。

    (2)如果对IList<T> 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。

    添加到ArrayList 中的任何引用或值类型都将隐式地向上强制转换为Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。---微软

    同arraylist

    初始化赋值

        class Program
        {
            static void Main(string[] args)
            {
                List<Student> stu1 = new List<Student>
                {
                    new Student{ age=19,name="tom" },
                    new Student{ age=12,name="li" },
                    new Student{ age=15,name="meimei" },
                };
            }
        }
        class Student
        {
          public  int age { get; set; }
          public string name { get; set; }
        }

    list.AddRange(数组或a,b,c) 的方式添加多个元素,动态获取数据并存入时方便

    Dictionary<TKey, TValue> 类

    同 hashtable

  • 相关阅读:
    【转载】阿里云轻量应用型服务器和ECS服务器比较
    Android -- 启动模式
    Android -- Broadcast接收
    Qt正则表达式提取数据
    Android -- Intent
    Android -- 多线程下载
    Android -- ContentProvider与联系人
    Android -- 内容观察者
    Android -- ContentProvider
    Android -- ListView与ArrayAdapter、SimpleAdapter
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/5633184.html
Copyright © 2011-2022 走看看