使用【泛型】和【Comparator】接口使用满足任何数据类型的selectSort排序算法

分析题干:

 这是一个选择排序算法
 方法需要用到泛型和Comparator接口

题干分析完成后,开始进行具体问题的分析(在这里我们以Person类的年龄升序排列为例)

首先创建一个Person类(主要代码如下,符合javaBean规范即可)

接下来是具体的实现

		/**
		 * 首先创建几个Persona2类对象 并存到数组persons中
		 */
		Person2 p1 = new Person2(1, "张三", 10.01);
		Person2 p2 = new Person2(2, "李四", 15.03);
		Person2 p3 = new Person2(3, "王五", 10.02);
		Person2 p4 = new Person2(4, "赵六", 10.05);
		Person2 p5 = new Person2(5, "周吴", 11.00);
		Person2 p6 = new Person2(6, "郑王", 10.06);
		
		Person2[] persons = {p1, p2, p3, p4, p5, p6};
		
		// 使用匿名内部类作为方法的参数
		sortSelect(persons, new Comparator<Person2>() {
			// 重写compare方法 
			@Override
			public int compare(Person2 o1, Person2 o2) {
				// 因为存在精度问题 所以这里使用BigDecimal类型来获取具体的数据
				BigDecimal bd1 = new BigDecimal(o1.getSalary() + "");
				BigDecimal bd2 = new BigDecimal(o2.getSalary() + "");
				
				return bd1.compareTo(bd2);
			}
		});
		/**
		 * 选择排序算法 可以满足指定类型的属性比较
	 	 * @param  泛型
	 	 * @param persons 符合泛型T约束的数据类型对象
		 * @param com 一个Comparator接口对象
		 */
		public static <T> void sortSelect(T[] persons, Comparator<T> com) {
		
			for (int i = 0; i < persons.length - 1; i++) {
				int index = i;
				for (int j = index + 1; j < persons.length; j++) {
					// 核心比较方式
					if (com.compare(persons[index], persons[j]) < 0) {
						index = j;
					}
				}
				
				if (index != i) {
					T temp = persons[index];
					persons[index] = persons[i];
					persons[i] = temp;
				}
				
			}
	}
		

你可能感兴趣的:(使用【泛型】和【Comparator】接口使用满足任何数据类型的selectSort排序算法)