集合>数组集合ArrayList

集合与泛型>集合

集合可以分为泛型集合类和非泛型集合类。

泛型集合类一般位于System.Collections.Generic命名空间,非泛型集合类位于System.Collections命名空间,除此之外,System.Collection.Specialized命名空间也有些集合类。

数组集合类     System.Collections.ArrayList;
布尔集合类     System.Collections.BitArray;
队列            System.Collections.Queue;
堆栈            System.Collections.Stack;
哈希表            System.Collections.Hashtable;
排序集合类            System.Collections.SortedList;

 

集合与泛型>数组集合>创建列表

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Collections;

namespace  ArrayListDemo1
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {
            
// 使用默认的初始容量创建ArrayList,该实例并没有任何元素。
            ArrayList al1  =   new  ArrayList();
            al1.Add(
" 111 " );
            al1.Add(
" 222 " );
            al1.Add(
" 333 " );
            DisplayResult(al1);
            
// 使用实现了ICollection接口的集合类来初始化新创建的ArrayList,该实例与参数中的集合具有相同的初始容量。
            ArrayList al2  =   new  ArrayList(al1);
            DisplayResult(al2);
            
// 经由指定一个整数值来初始化ArrayList的容量。
            ArrayList al3  =   new  ArrayList( 20 );
            DisplayResult(al3);
            ArrayList al4
= ArrayList.Repeat( " ccc " 4 );
            DisplayResult(al4);
            Console.ReadLine();
          }
        
static   void  DisplayResult(ArrayList ls)
        {
            Console.WriteLine(
"" );
            
if  (ls.Count  <=   0 )
            {
                Console.WriteLine(
" 数合没有任何集合元素 " );
            }
            
foreach  ( object  s  in  ls)
            {
                Console.Write(Convert.ToString(s));
            }
        }
    }
}


 集合与泛型>数组集合>添加元素

两种方法向ArrayList添加元素:

Add,将单个元素添加到列表的尾部。

AddRange,将实现ICollection接口的集合实例,添加到列表的尾部。

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Collections;

namespace  ConsoleApplication1
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {
            
// 声明一个接受20个元素的ArrayList
            ArrayList al  =   new  ArrayList( 20 );
            
// 使用ArrayList的Add方法添加集合元素。
            al.Add( " 我是元素一 " );
            al.Add(
" 我是元素二 " );
            al.Add(
" 我是元素三 " );
            al.Add(
" 我是元素四 " );
            
string [] strs  =  {  " 我是元素五 " " 我是元素六 " " 我是元素七 " " 我是元素八 "  };
            
// 使用AddRange方法添加实现了ICollections接口的集。并按集合参数中元素的顺序添加
            al.AddRange(strs);
            
foreach  ( string  str  in  al)
            {
                Console.WriteLine(str);
            }
            Console.ReadLine();
        }

    }

   
}


 集合与泛型>数组集合>插入元素

 两种方法向ArrayList插入元素:

Add,将单个元素插入列表指定的索引位置。

AddRange,将实现ICollection接口的集合实例,插入到列表指定的索引位置。

 

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Collections;

namespace  ConsoleApplication1
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {
             ArrayList al 
=   new  ArrayList( 20 );
            
// 使用Insert方法插入集合元素。
            al.Insert( 0 " 我是元素一 " );
            al.Insert(
1 " 我是元素二 " );
            al.Insert(
2 " 我是元素三 " );
            al.Insert(
3 " 我是元素四 " );
            Queue qu
= new  Queue();            
            qu.Enqueue(
" 我是元素五 " );
            qu.Enqueue(
" 我是元素六 " );
            qu.Enqueue(
" 我是元素七 " );
            
// 使用InsertRange方法插入集合元素。
            al.InsertRange( 4 ,qu);
            Console.WriteLine(
" 使用Insert和InsertRange方法添加集合元素 " );
            
foreach ( string  s  in  al)
            {
                Console.WriteLine(s);
            }
            Console.ReadLine();
        }

    }

   
}


集合与泛型>数组集合>删除元素

有三种方法删除元素,

Remove,接受object类型的参数,删除指定元素值。

RemoveAt,接受int类型的参数,删除指定索引的元素。

RemoveRange,删除一定范围的元素。

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Collections;

namespace  ConsoleApplication1
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {
            ArrayList al 
=   new  ArrayList( 20 );
            al.AddRange(
new   string [ 8 ] {  " 元素一 " " 元素二 " " 元素三 " " 元素四 " " 元素五 " , " 元素六 " , " 元素七 " , " 元素八 "  });
            al.Remove(
" 元素二 " );
            al.RemoveAt(
2 );
            al.RemoveRange(
3 2 );
            
foreach  ( string  s  in  al)
            {
                Console.WriteLine(s);
            }
            Console.ReadLine();
;
        }

    }

   
}


集合与泛型>数组集合>排序>简单排序

使用Sort方法进行排序,集合中所有元素必须实现IComparable接口,否则,抛出异常。

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Collections;

namespace  ConsoleApplication1
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {
            ArrayList al 
=   new  ArrayList();
            al.AddRange(
new   string [ 8 ] {  " Array1 " " Array2 " " Array3 " " Array5 " " Array4 " " Array8 " " Array7 " " Array6 "  });
            al.Sort();
            
foreach  ( string  s  in  al)
            {
                Console.WriteLine(s);
            }
            Console.ReadLine();
        }

    }

   
}


集合与泛型>数组集合>排序>复杂排序

定义一个待排序类,自定义排序方法,开始排序处理。

ExpandedBlockStart.gif Book待排序类
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  AdvancedSort
{
   
///   <summary>
   
///  定义书籍类。具有三种属性:书名,分类,价格。
   
///   </summary>
    public   class  Book
    {
       
private   string  _bookname;
       
public   string  BookName
       {
           
get  {  return  _bookname; }
           
set  { _bookname  =  value; }
       }
       
private   string  _bookcategory;
       
public   string  BookCategory
       {
           
get  {  return  _bookcategory; }
           
set  { _bookcategory  =  value; }
       }
       
public   double  _price;
       
public   double  Price
       {
           
get  {  return  _price; }
           
set  { _price  =  value; }
       }
       
public  Book( string  bookname, string  bookcategory, double  price)
       {
           _bookname 
=  bookname;
           _bookcategory 
=  bookcategory;
           _price 
=  price;
      }
    }
}


ExpandedBlockStart.gif 自定义排序方法
using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Collections;

namespace  AdvancedSort
{
    
///   <summary>
    
///  按价格从高到低排序
    
///   </summary>
    public   class  InstanceCompare:IComparer
    {
       
private   const   string  _category  =   " C# " ;
        
#region  IComparer<Book> 成员
        
public   int  Compare( object  x,  object  y)
        {
               
double  i  =  ((Book)y).Price  -  ((Book)x).Price;
                
if  (i  >   0 )
                    
return   1 ;
                
else   if  (i  <   0 )
                    
return   - 1 ;
                
else  
                    
return   0 ;
        }
        
#endregion
    }
    
///   <summary>
    
///  按照书名从高到低排序
    
///   </summary>
     public   class  BookNameCompare:IComparer
    {
        
#region  IComparer 成员

        
public   int  Compare( object  x,  object  y)
        {
            
return   new  CaseInsensitiveComparer().Compare(((Book)y).BookName, ((Book)x).BookName);            
        }

        
#endregion
    }
}



ExpandedBlockStart.gif 开始排序处理
using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Collections;

namespace  AdvancedSort
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {
            Book[] books 
=   new  Book[ 8 ]{ new  Book( " C#书籍z " , " C# " , 45.5 ), new  Book( " C#书籍f " , " C# " , 55.8 ),
                
new  Book( " Delphi书籍1 " , " Delphi " , 78 ), new  Book( " C#书籍x " , " C# " , 55.9 ), new  Book( " ASP.NET " , " ASP.NET " , 66 ),
                
new  Book( " Delphi书籍2 " , " Delphi " , 79 ), new  Book( " C#书籍y " , " C# " , 60 ), new  Book( " C#书籍b " , " C# " , 80 )};
            ArrayList al 
=   new  ArrayList(books);
            Console.WriteLine(
" 排序前的集合排列 " );
            DispalyResult(al);
            al.Sort(
new  InstanceCompare());           
            Console.WriteLine(
" 按价格排序后的集合排列 " );
            DispalyResult(al);
            al.Sort(
new  BookNameCompare());
            Console.WriteLine(
" 按书名排序后的集合排列 " );
            DispalyResult(al);

            Console.ReadLine();
        }
        
static   void  DispalyResult(ArrayList al)
        {
            
foreach  (Book book  in  al)
            {
                Console.WriteLine(
" 书名:{0} 价格:{1} " ,book.BookName,book.Price);
            }
        }
    }
}


集合与泛型>数组集合>排序>查找元素

有三种方法,自己msdn查,是IndexOf,LastIndexOf,BinarySearch.

BinarySearch是二分算法搜索。三个搜索方法,搜到的话,返回索引值,搜不到,返回-1.

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Collections;

namespace  ConsoleApplication1
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {
            
string [] str  =  {  " 元素一 " " 元素二 " " 元素三 " " 元素四 " " 元素五 " " 元素六 "  };
            ArrayList al 
=   new  ArrayList(str);
            
int  i  =  al.IndexOf( " 元素三 " );
            Console.WriteLine(
" 元素三在集合中的位置是 "   +  i);
            i 
=  al.LastIndexOf( " 元素五 " );
            Console.WriteLine(
" 元素五在集合中的位置是 "   +  i);
            
int  j  =  al.BinarySearch( " 元素三 " ); // al.BinarySearch("元素六")就找不到元素,很奇怪,不知道为什么
             if  (j  >   0 )
                Console.WriteLine(
" 元素六在集合中的位置是 "   +  j);
            
else
                Console.WriteLine(
" 没有找到元素一 " );
            Console.ReadLine();
        }

    }

   
}


集合与泛型>数组集合>排序>遍历列表

ArrayList内部有一个数组,可通过下标访问,而且 ArrayList实现了IEnumerable接口,所以遍历集合,可以使用for或foreach方法

ExpandedBlockStart.gif 代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Collections;

namespace  ConsoleApplication1
{
    
class  Program
    {
        
static   void  Main( string [] args)
        {
            ArrayList al 
=   new  ArrayList( new   string [ 6 ] {  " 元素一 " " 元素二 " " 元素三 " " 元素四 " " 元素五 " " 元素六 "  });
            
// 使用for遍历
            Console.WriteLine( " for " );
            
for  ( int  i  =   0 ; i  <=  al.Count  -   1 ; i ++ )
            {
                Console.Write(al[i]);
            }
            Console.WriteLine(
"" );
            Console.WriteLine(
" foreach " );
            
// 使用foreach遍历
             foreach  ( object  s  in  al)
            {
                Console.Write(s);
            }
            Console.ReadLine();
        }

    }

   
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值