Java中如何对ArrayList集合中的元素进行排序
可以利用Collections集合工具类中的方法进行排序:public static <T> void sort(List<T> list):将集合中的元素按默认规则(升序)排序public static <T> void sort(List<T> list,Comparator<? super T>:将集合中的元素按照指定规则排序...
可以利用Collections集合工具类中的方法进行排序:
public static <T> void sort(List<T> list)
:将集合中的元素按默认规则(升序)排序
public static <T> void sort(List<T> list,Comparator<? super T>
:将集合中的元素按照指定规则排序
第一种方法
如果集合中存放的整数类
public static void main(String[] args){
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(54);
list1.add(25);
list1.add(29);
list1.add(11);
Collections.sort(list1);
for(int i:list1)
System.out.println(i);
//输出结果
/*11
25
29
54*/
}
如果存放的是字符串
public static void main(String[] args){
ArrayList<String> list4 = new ArrayList<>();
list4.add("hello");
list4.add("world");
list4.add("bye");
Collections.sort(list4);
for(String s :list4)
System.out.println(s);
//输出结果
/*
bye
hello
world
*/
}
如果存放的自定义对象
因为Collections.sort(List<T> list
)中的list参数必须要有明确的排序规则,所以要对存放了自定义对象的list集合进行排序,需要该对象实现Comparable
接口,并实现接口唯一的方法compareTo(T o)
,按照我们自定义的规则进行排序。例如自定义Person类,按照年龄升序排序:
public class Person implements Comparable<Person>{
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Person o) {
return this.age - o.age;//this-参数 升序
//return o.age - this.age 降序
}
}
public static void main(String[] args){
ArrayList<Person> list2 = new ArrayList<>();
list2.add(new Person("张三",32));
list2.add(new Person("李四",12));
list2.add(new Person("王五",23));
Collections.sort(list2);
for(Person p:list2)
System.out.println(p);
//输出结果
/*Person [name=李四, age=12]
Person [name=王五, age=23]
Person [name=张三, age=32]*/
}
第二种方法
第二种方法中的第二个参数是需要实现Comparator
接口,需要实现接口中的compare(T o1,T o2)
方法,一般对自定义对象排序的时候可采取这种方法。
Comparator
和Comparable
接口的区别在于,Comparator
接口相当于第三方的裁判,对传入的两个参数进行比较;Comparable
接口是用自身(this)与参数进行比较。
例子如下,先创建一个Student类
public class Student {
private String name;
private int score;
public Student() {
}
public Student(String name,int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", score=" + score + "]";
}
创建集合,在集合中存放Student对象,采用匿名内部类的方法实现Comparator
接口,按照分数降序排序
public static void main(String[] args){
ArrayList<Student> list3 = new ArrayList<>();
list3.add(new Student("张三",75));
list3.add(new Student("李四",91));
list3.add(new Student("王五",89));
Collections.sort(list3, new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
//return o1.getScore() - o2.getScore();//升序
return o2.getScore() - o1.getScore(); //降序
}
});
}
//输出结果
/*
Student [name=李四, score=91]
Student [name=王五, score=89]
Student [name=张三, score=75]
*/
如果文章有错误,欢迎指正!!
更多推荐
所有评论(0)