加载中...

Java工具类之 collections

Java工具类之 collections

sort()自然排序:

作用:

把集合中的元素按照规则升序或者降序,再或者什么也不干。

注意点:

当使用sort方法时,该集合元素必须是Comparable的子类型,也就是集合中的元素必须实现comparable接口中的comparaTo方法。否则不能使用该方法。

public int compareTo(T o);
必须实现这个抽象方法,才能使用sort方法。但是由于我们一些基本的常用类如String,基本数据类型的包装类等,已经实现了该方法,所以我们不需要自己重写该方法了。自定义类型使用sort方法就必须实现comparaTo方法。

sort()自定义排序:

自定义类型,如学生类,有属性:年龄,姓名等。创建多个学生类对象,放入List集合中。自定义使用sort方法时就必须重写comparaTo方法。

@Override
public int compareTo(Student2 o) {
return this.age-o.age;
}
重写之后的comparaTo方法。

重载之后的sort():

sort()方法还有第二种类型(collection,new Comparator)

Comparator是一个接口,实际上是new了Comparator的实现类,但是要实现里面的抽象方法。

使用案例:

创建 Node 结点,其中包含 a, b 两个成员变量,根据 a 来排序

实现代码如下:

public class Test {

	public static void main(String[] args) {
		ArrayList<Node> arrayList = new ArrayList<>();
		arrayList.add(new Node(100, 9));
		arrayList.add(new Node(0, 0));
		arrayList.add(new Node(9, 100));
		Collections.sort(arrayList);
		System.out.println(arrayList);
	}
}

class Node implements Comparable<Node> {
	int a;
	int b;

	public Node(int a, int b) {
		super();
		this.a = a;
		this.b = b;
	}

	@Override
	public String toString() {
		return "Node [a=" + a + ", b=" + b + "]";
	}

	@Override
	public int compareTo(Node o) {
		return this.a - o.a;// 从小到大
//		return o.a - this.a;// 从大到小        
	}
}

image-20230309204027556

注意点:

1.按照某种规则排序,是重写comparaTo方法时,用什么属性去比较,这个比较的属性就是比较规则排序。

2.实现升序或者降序规则:this(当前调用方法的对象) o(参数传入)
所有比较最底层的逻辑都是发生两两比较逻辑,返回比较结果
正数 this.age > o.age
负数 this.age < o.age
0 this.age==o.age

posted @ 2023-03-09 20:42  ChuenSan  阅读(16)  评论(0编辑  收藏  举报