java icomparer_深入IComparable与IComparer的排序实例详解

如下所示:

using System;

using System.Collections.Generic;

using System.Text;

using System.Collections;

namespace hgoApp

{

class Comparer

{

static void Main()

{

Employee[] Employees = new Employee[5];

Employees[0] = new Employee("张三", 2800);

Employees[1] = new Employee("李四", 1800);

Employees[2] = new Employee("王五", 5800);

Employees[3] = new Employee("马六", 12800);

Employees[4] = new Employee("钱七", 8800);

Console.WriteLine("按照姓名排序");

Array.Sort(Employees);

foreach (Employee em in Employees)

{

Console.WriteLine(em);

}

Console.WriteLine("按照薪水排序");

Array.Sort(Employees, Employee.SalaryCom);

foreach (Employee em in Employees)

{

Console.WriteLine(em);

}

}

}

class Employee : IComparable

{

private string _Name;

public string Name

{

get { return _Name; }

}

private int _Salary;

public int Salary

{

get { return _Salary; }

}

public Employee(string Name, int Salary)

{

_Name = Name;

_Salary = Salary;

}

//显示接口实现

int IComparable.CompareTo(object obj)

{

if (!(obj is Employee))

{

throw new ArgumentException("不是Employee类");

}

return _Name.CompareTo(((Employee)obj)._Name);

}

//提供一个公用的强类型重载版本

public int CompareTo(Employee Em)

{

return _Name.CompareTo(Em._Name);

}

//当第一次实例化Employee的时候,_SalaryCom为空,当使用SalaryCom时,就会创建一个SalaryCompare对象,第2次,3次的时候,就可以直接使用_SalaryCom了

private static SalaryCompare _SalaryCom = null;

public static IComparer SalaryCom

{

get

{

if (_SalaryCom == null)

{

_SalaryCom = new SalaryCompare();

}

return _SalaryCom;

}

}

//嵌套类(这个类是针对薪水进行排序的类)

private class SalaryCompare:IComparer

{

//使用指定的IComparer对Array中的元素进行排序

int IComparer.Compare(object obj1,object obj2)

{

if (!(obj1 is Employee) || !(obj2 is Employee))

{

throw new ArgumentException("不是Employee类");

}

return ((Employee)obj1)._Salary.CompareTo(((Employee)obj2)._Salary);

}

}

public override string ToString()

{

return _Name +"  "+ _Salary.ToString();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值