测试类
public class MainTest {
public static void main(String[] args) {
Dog[] arr = {new Dog(50), new Dog(30), new Dog(40), new Dog(20)};
// 这个是排序工具类
SortLgj<Dog> dogSortLgj = new SortLgj<>();
// 这个是具体的排序策略
dogSortLgj.sort(arr,new DogComparator());
System.out.println(Arrays.toString(arr));
}
}
具体的Bean类
public class Dog {
public int weight;
public Dog(int weight){
this.weight = weight;
}
@Override
public String toString() {
return "Dog{" +
"weight=" + weight +
'}';
}
}
排序工具类
public class SortLgj<T> {
//从小到大排序,具体的是按照,身高、体重、或者是其他交个具体的策略去实现
public void sort(T[] arr,ComparatorLgj<T> comparatorLgj){
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
int compare = comparatorLgj.compare(arr[j],arr[j +1]);
if (compare > 0){
T temp = arr[j];
arr[j] = arr[j +1];
arr[j +1] = temp;
}
}
}
}
}
// 这个是具体的策略方法
public class DogComparator implements ComparatorLgj<Dog>{
@Override
public int compare(Dog o1, Dog o2) {
if (o1.weight > o2.weight){
return 1;
}else if (o1.weight < o2.weight){
return -1;
}
return 0;
}
}
//这个表示函数式接口,只能有一个抽象方法,抽象的策略方式
@FunctionalInterface
public interface ComparatorLgj<T> {
int compare(T o1, T o2);
}
下面这个是排序的总结和回忆,原则是两两元素进行比较,第一次比较完成之后最大的就可以确认,放到数组的最后一位,然后再进行第二次比较,具体代码如下,这样便于理解
public static void paixu2() {
int[] arr = {89, 4, 56, 43, 8};
for (int x = 0; x < arr.length - 1; x++) {
for (int i = 0; i < arr.length - 1 - x; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
print(arr);
}
public static void paixu() {
int[] arr = {89, 4, 56, 43, 8};
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
for (int i = 0; i < arr.length - 1 - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
for (int i = 0; i < arr.length - 1 - 2; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
for (int i = 0; i < arr.length - 1 - 3; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
print(arr);
}
public static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}