集合工具类Collections
常用方法:
addAll():往集合中添加一些元素。(比add()方法更好用,可以一次性添加多个元素)
shuffle():打乱集合顺序。
sort():将集合中的元素按默认升序排序。
sort()方法中可以将小于号重载,重新制定排序规则,对对象进行排序,类似于c++中结构体之间的比较,重载了小于号。
way1:Comparable使用前提:
被排序的集合里存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序的规则
Comparable接口的排序规则:
- 升序:自己(this)-参数
- 降序:参数-自己(this)
way2:Comparator使用:
参数是(数组名称,比较器)结合使用的。
Comparator的排序规则:
- 升序:o1-o2
- 降序:o2-o1
Comparator和Comparable的区别:
- Comparable:自己(this)和别人 (参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法
- Comparable:相当于找一个第三方的裁判,比较这两个
- 优先使用Comparable,Comparator作为了解
//Person类,实现Comparable接口,重写比较的规则compareTo方法
public class Person implements Comparable<Person>{
private int age;
private String name;
public Person() {
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
//重写排序规则
@Override
public int compareTo(Person o) {
//比较两个人的年龄(this和参数o)
if(this.getAge()!=o.getAge())
return this.getAge()-o.getAge();//升序
else
return this.getName().charAt(0)-o.getName().charAt(0);如果两个人岁数一样,就比较两个人的第一个字母
}
}
public class demo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
//addAll():往集合中添加一些元素。(比add()方法更好用,可以一次性添加好多)
Collections.addAll(list,"a","b","c","d","e");
System.out.println(list);
//shuffle():打乱集合顺序。
Collections.shuffle(list);
System.out.println(list);
//sort():将集合中的元素按默认升序排序。
Collections.sort(list);
System.out.println(list);
//Way1:sort()中Comparable的排序:
ArrayList<Person> listP = new ArrayList<>();
listP.add(new Person(18,"张三"));
listP.add(new Person(20,"李四"));
listP.add(new Person(25,"王二麻子"));
Collections.sort(listP);
System.out.println(listP);
//Way2:sort()中Comparaor的排序:
Collections.sort(listP, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
if(o1.getAge()!=o2.getAge())
return o2.getAge()-o1.getAge();//降序
else
return o1.getName().charAt(0)-o2.getName().charAt(0);//如果两个人岁数一样,就比较两个人的第一个字母
}
});
System.out.println(listP);
}
}
输出结果:
[a, b, c, d, e]
[c, d, a, e, b]
[a, b, c, d, e]
[Person{age=18, name=‘张三’}, Person{age=20, name=‘李四’}, Person{age=25, name=‘王二麻子’}]
[Person{age=25, name=‘王二麻子’}, Person{age=20, name=‘李四’}, Person{age=18, name=‘张三’}]