首先定义一个Book类:
namespace
ArrayListSort
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
class Book:IComparable<Book>
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
private string _bookname;
private string _bookcategory;
public double _price;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public string BookName
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return _bookname; }
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
set ...{ _bookname = value; }
}
public string BookCategory
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return _bookcategory; }
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
set ...{ _bookcategory = value; }
}
public double Price
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return _price; }
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
set ...{ _price = value; }
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public Book(string bookname, string bookcategory, double price)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
_bookname = bookname;
_bookcategory = bookcategory;
_price = price;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
IComparable
成员#region IComparable<Book> 成员
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public int CompareTo(Book other)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return (BookName.CompareTo(other.BookName));
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
#endregion
}
}
以下定自定义排序类PriceDownClass来实现IComparer
namespace
ArrayListSort
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
class PriceDownClass:IComparer<Book>
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
IComparer
成员#region IComparer<Book> 成员
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public int Compare(Book x, Book y)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (y.Price > x.Price)
return 1;
else if (y.Price == x.Price)
return 0;
else
return -1;
//throw new Exception("The method or operation is not implemented.");
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
#endregion
}
}
以下定自定义排序类PriceDownClass来实现IComparer
namespace
ArrayListSort
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
class PriceCompare : IComparer
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
IComparer
成员#region IComparer<Book> 成员
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public int Compare(object x, object y)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
double i = ((Book)y).Price - ((Book)x).Price;
// double i = y.Price - x.Price;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
if ( i>0)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
return 1;
else if (i==0)
return 0;
else
return -1;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
#endregion
}
}
以下为整个程序的唯一入口:
namespace
ArrayListSort
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
class Program
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
static void Main(string[] args)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
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", 55.8),new Book("Delphi书籍2","Delphi",79),
new Book("C#书籍y", "C#", 60),new Book("C#书籍b", "C#", 80)
};
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
ArrayList a1 = new ArrayList(books);//以books数组为参数构造ArrayList实例 a1;
Console.WriteLine("Array_排序前的集合排列:");
DisplayResult(books);
Console.WriteLine();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Array.Sort(books);
Console.WriteLine("Array_按书籍名称排序后:");//Book类已经实现了IComparable接口
DisplayResult(books);
Console.WriteLine();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Array.Sort(books, new PriceDownClass());
Console.WriteLine("Array_按书籍价格降价排序后:");
DisplayResult(books);
Console.WriteLine();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//a1.Sort();//Book类已经实现了IComparable接口,但不能实现排序
//a1.Sort(new PriceDownClass());//Array情况下可以排序,不知为什么ArrayList情况下就不行了??
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
更改自定义排序类 public int Compare(Book x, Book y) 改为 public int Compare(object x, object y)
就可以了在ArrayList的自定义排序中应用,更改后的自定义排序类也可用天Array的Sort()方法
*/
a1.Sort(new PriceCompare());
Console.WriteLine("ArrayList_按书籍价格降价排序后:");
DisplayResult(a1);
Console.WriteLine();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Array.Sort(books, new PriceCompare());//
DisplayResult(books);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
static void DisplayResult(Book[] al) ...{
foreach (Book book in al)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine("书名:{0} 价格:{1} ", book.BookName, book.Price);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
static void DisplayResult(ArrayList al)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
foreach (Book book in al)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Console.WriteLine("书名:{0} 价格:{1} ", book.BookName, book.Price);
}
}
}
}
Array和ArrayList在自定义排序类中的区别从上例中可以看出, 对于集合元素为引用类型时,类中实现了IComperable接口,在Array中可直接进行缺省排序Array.Sort(books),但a1.Sort() 不能实现排序;自定义排序类中实现泛型接口时如果确定IComparer<T>的T类型,则此自定义排序类不能用于ArrayList中实现排序.