博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数组集合ArrayList

Posted on 2010-10-10 21:11  moss_tan_jun  阅读(505)  评论(0编辑  收藏  举报

集合与泛型>集合

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

泛型集合类一般位于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;

 

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

代码
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接口的集合实例,添加到列表的尾部。

代码
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接口的集合实例,插入到列表指定的索引位置。

 

代码
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,删除一定范围的元素。

代码
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(
32);
            
foreach (string s in al)
            {
                Console.WriteLine(s);
            }
            Console.ReadLine();
;
        }

    }

   
}


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

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

代码
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();
        }

    }

   
}


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

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

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;
      }
    }
}


自定义排序方法
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
    }
}



开始排序处理
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.

代码
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方法

代码
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();
        }

    }

   
}