集合

集合

集合类都定义在 **System.Collections **

类名特点
ArrayList与数组相似,能保存不同类型数据,能动态改变集合元素的数量
Stack后进先出(LIFO)
Queue先进先出(FIFO)
HashTable键(key)/值(Value) ,根据哈希代码1组织键/值对0
SortedList按照键值对进行排序的键/值对的集合,元素可按键值或索引访问
  • 集合类实现了“ICollection”接口,在ICollection接口中有3个属性和一个方法
  1. count

  2. IsSynchronized 能够根据|访问集合的线程是否安全|返回布尔值

  3. SyncRoot 同步访问集合的对象

  4. CopyTo(Array array ,int index ) 将集合中特定索引的元素复制到指定数组

    • 集合类实现了“IEnumerable”接口,可以使用foreach循环对集合元素遍历

ArrayList集合保存不同类型数据

ArrayList list = new ArrayList(otherCollection);
/*
定义ArrayList,将其他集合的元素通过参数传入集合
object,添加任何类型的元素
*/
/*
 * 调用arraylist类的方法 add 添加数据
 * 使用foreach遍历并输出list对象中的数据
 * 使用[]操作符输出list对象中的数据
 */
//声明使用的命名空间
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace collection
{//定义program类
    class program
    {
        static void Main()
        {   //创建 arraylist 类的对象
            ArrayList list = new ArrayList();
            //调用arraylist类的方法 Add 添加数据
            list.Add(13);
            list.Add(12);
            list.Add(432);
            list.Add(899);
            list.Add(8900);
            list.Add(13);
            //使用Capacity获取或者设置List的容量,list.Capacity=10
            list.Capacity=10;
            Console.WriteLine("list.Capacity=" + list.Capacity);

            //使用foreach遍历并输出list对象中的数据 输出:[13][12][432][899][8900][13]
            foreach (int num in list)
                Console.WriteLine("["+num+"]");
            Console.WriteLine("\n");
            //使用list.Remove(object)集合移除元素object,使用list.Remove(int)移除int位置上的元素
            list.Remove(8900);
            list.RemoveAt(1);
            //使用list.Insert(int,object)向集合int位置上添加元素object
            list.Insert(1, 31);
            //使用count属性获取元素个数,使用[]操作符输出list对象中的数据,输出[13][31][432][899][13]
            for (int i = 0; i < list.Count; i++) Console.WriteLine("["+list[i]+"]");
            Console.WriteLine("\n");
            //使用List.TrimToSize时集合大小与集合元素个数一致,list.Capacity=5
            list.TrimToSize();
            Console.WriteLine("list.Capacity=" + list.Capacity);
            //使用list.Contains(object)查询是否包含int,输出:bool list.Contains(31)=True
            Console.WriteLine("bool list.Contains(31)=" + list.Contains(31));
            //使用IndexOf(object)索引object位置,输出list.IndexOf(13)=0 list.IndexOf(1300)=-1 list.LastIndexOf(13)=4
            Console.WriteLine("list.IndexOf(13)=" + list.IndexOf(13));
            Console.WriteLine("list.IndexOf(1300)=" + list.IndexOf(1300));
            Console.WriteLine("list.LastIndexOf(13)=" + list.LastIndexOf(13));
            //clear清除集合元素 list.Count=0
            list.Clear();
            Console.WriteLine("list.Count=" + list.Count);
            Console.ReadLine();
        }
    }
}
属性特点
Capacity获取或者设置ArrayList集合大小
Count获取ArrayList元素数量
Add\Remove()在集合末尾添加/移除集合|元素
ToArray返回一个Object的数组,包含ArrayList的所有元素

Stack集合处理栈&Queue集合处理队列

StackQueue
Push:进栈操作Enqueue:进队
Pop:出栈操作Dequeue:出队
Peek:获取最早出栈的变量(最后一个入队),但该元素依然在栈中Peek:获取最早出队的变量(最早一个进队),但该元素依然在队中
//声明使用的命名空间
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace collection
{//定义program类
    class program
    {
        static void Main()
        {//创建 stack 类的对象
            Stack stack = new Stack();

            //调用stack类的方法 push 添加数据
            stack.Push(100);
            stack.Push(123);
            stack.Push(213);

            //创建queue 类的对象,stack传入queue 也是LIFO顺序
            Queue queue = new Queue(stack);

            //使用queue类的方法 enqueue 添加数据 queueLength:6 213、123、100、123、4342、3432
            queue.Enqueue(123);
            queue.Enqueue(4342);
            queue.Enqueue(3432);
            Console.WriteLine("queueLength:" + queue.Count);

            //使用queue类的方法 dequeue取出数据,取完后queue.Count=0
            while (queue.Count != 0)
            {
                Console.WriteLine("queue.data:" + queue.Dequeue());
            }
            Console.WriteLine("queueLength:" + queue.Count);
            Console.WriteLine("stackLength:" + stack.Count);
            Console.WriteLine(stack.Peek());
            //使用stack类的方法 pop 取出数据,取完后Stack.Count=0
            while (stack.Count != 0)
            {
                Console.WriteLine(stack.Pop());
            }
            Console.WriteLine("stackLength:" + stack.Count);
            Console.ReadLine();
        }
    }
}

键-值 字典类型的集合

Hashtable

key-value类型

获取Hashtable元素不会改变Hash table的大小

可分别检索Key 和Value的值

//声明使用的命名空间
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace collection
{//定义program类
    class program
    {
        static void Main()
        {//创建 Hashtable 类的对象
            Hashtable ht = new Hashtable();
            ht.Add(1, "a");
            ht.Add(2, "b");
            ht.Add(3,"c");
            //LIFO顺序遍历
            foreach (int key in ht.Keys) {  Console.WriteLine("[" + key + ":" + ht[key] + "]");}
            foreach(string v in ht.Values)  
            {Console.WriteLine("[" + v);}

            ht.Remove(1);
            Console.WriteLine("ht.Count=" + ht.Count);
            Console.WriteLine("ht.Contains(1)=" + ht.ContainsKey(1));
            Console.ReadLine();
        }
    }
}

sortedList

与HashList的区别

  1. 对元素使用整型数值索引,且SortedList对集合元素自动排序并储存,因此输出也是有序的。

  2. 可以使用自定义的类作为键值,需要实现Hashtable集合所具备的一些条件2外,还需这些类实现了Icompareable接口(存在CompareTo)[String类和其他一些简单的数据类型都能提供Icompareable接口的实现]

    方法特点
    SL.GetKey(i)指定索引的键值
    SL.GetByIndex(i)指定索引的元素值
    CountKeys
    ValuesAdd(object key, object value)
    IndexOfKey()IndexOfValue()
    Remove()RemoveAt()
    Clear()ContainsKey()
    ContainsValue()

  1. 哈希码产生的依据:哈希码并不是完全唯一的,它是一种算法,让同一个类对象按照自己不同的特征尽量的有不同的哈希码,但不同对象也可能有相同的哈希码↩︎

  2. 选择一种数据类型作为key时,应重写这些类型从object类中继承的Equals()和GetHashCode() ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值