(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

 

posted @ 2016-07-01 15:17  富坚老贼  阅读(214)  评论(0编辑  收藏  举报