第17天C#集合List、ArrayList和字典


List<泛型集合>

線性數據結構

概念

C#集合是來維護一組對象的數據結構,與數組不同,集合包含更多的功能。如:自動添加元素到指定位置,排序等。

C#中集合是指在system.Collection下的類型,他們大多數是通過實現此命名空間下的接口來實現的。泛型集合是指在system.Collection.Generic下的類型,他們在具體的集合類型的特性上增加了泛型的特性。泛型集合相對集合更安全,性能更好。

聲明(定義)

當我們創建了一個泛型列表的時候在其內部會創建一個大小為4的數組

每次當添加的元素超過了這個大小,其內部數組的長度將會擴大一倍

使用泛型集合類型之前必須先using System.Collections.Generic

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _1208
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> list = new List<int>(10);     //實例化 如果不給長度的話 默認長度為4
            Console.WriteLine(list.Capacity);       //獲取最大長度
            for (int i = list.Capacity; i > 0; i--)
            {
                list.Add(i);                        //遍歷添加數據 Add()
            }
            foreach (int item in list)
            {
                Console.Write(item + " ");          //打印數據
            }
            Console.WriteLine();
            list.RemoveAt(5);                       //移除指定索引位置的數據  RemoveAt(index)
            foreach (int item in list)
            {
                Console.Write(item + " ");
            }
            Console.WriteLine();

            list[7] = 15;                           //指定索引位置賦值       
            list.Remove(15);                        //按元素刪除             Remove(要刪的數據內容)
            list.Insert(2, 100);                    //指定索引插入數據
            Console.WriteLine(list.IndexOf(100));                                      //通過值找索引  從前往后
            Console.WriteLine("從后往前 " +list.LastIndexOf(100));                     //通過值找索引  從后往前找
            bool isHave = list.Contains(100);                                         //查找是否含有某個數據
            Console.WriteLine(isHave);

            Console.WriteLine(list.Count);      //實際長度
            Console.WriteLine(list.Capacity);   //總長度

注意

賦值:通過索引器賦值時,傳入的索引要小於count的值

刪除:需要刪除的索引值必須小於count

插入:必須要在有值的范圍內插入

查找:通過值查找索引,如果該集合中沒有這個值,則返回-1

List排序

可以使用Sort方法直接對基本數據類型進行排序List可以對繼承了IComparable<T>接口的類或結構體進行排序

返回值<0:此實例在排序順序中位於other之前

返回值>0:此實例在排序順序中位於other之后

返回值==0:此實例與other實例位置不變

排序練習

 

 

public int CompareTo(Drug other)
        {
            //判斷類型是否相同,如果不同,兩者類型互減,如果相同則判斷品質誰前誰后
            return !(this.type == other.type) ?  (int)this.type - (int)other.type : (int)this.quality - (int)other.quality;
        }

ArrayList

直接通過實例化創建

不是泛型的

ArrayList創建的集合可以存儲任何類型

 

拆箱和裝箱--慎用(消耗性能較大)

拆箱:Object轉換成子類

裝箱:將子類轉換成Object類型

拆箱裝箱都非常消耗性能

ArrayList和List的區別

 

Dictionary字典

散列排列

字典的結構

字典在內存中為散列結構,用Key來索引對應Value,方便修改和查找(高於列表)

每對數據分為“鍵”和“值”

申請字典對象時需要指定鍵和值的類型

使用鍵值對的方式存取數據

字典也是泛型的

字典的特性

無序的

字典的元素是成對出現的 

字典中的“鍵”不能重復

通過“鍵”去索引該鍵值對 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM