java list 根据string排序_Java对List集合,String数组排序

在平时开发的过程中,经常会遇到需要对数组、集合中元素按规则进行排序,本文记录在开发过程中可能遇到的情况以及相关的完整代码示例。

知识点

Comparable接口

实现了该接口的对象,必须重写compareTo方法,对象实现了该接口,则该对象具有排序功能,比如String、Integer等。

Comparator接口

要实现自定义排序器的时候,需要实现该接口。当某个类不具备排序功能或者已有的排序功能不足以支撑你需求的时候,就是自定义排序器登场的时候了。比如String内置的排序实现按字符顺序排序,那我想按字符串长度排序咋办呢?这时就可以自定义实现Comparator的对象了。

数组(比如String[])排序使用Arrays.sort

集合(比如List)排序使用Collections.sort

实例

1. 默认String排序示例

1.1 数组排序用法

String[] strArr = new String[]{"zhangsan","lisi","wangwu"};

//数组默认按字符升序排序

Arrays.sort(strArr);

System.out.println("默认按字母升序排序:");

for (String str:strArr) {

System.out.println(str);

}

1.2 集合排序用法

List strList = new ArrayList<>();

strList.add("zhangsan");

strList.add("lisi");

strList.add("wangwu");

//集合默认按字符升序排序

Collections.sort(strList);

System.out.println("默认按字母升序排序:");

for (String str:strList) {

System.out.println(str);

}

以上两个例子都是输出:

98b3faf324a5

在这里插入图片描述

2.自定义排序器,String数组按字符串长度倒序

创建自定义排序器StringComparator

package com.simon.interfacedemo.sortdemo.stringdemo;

import java.util.Comparator;

/**

* @Description: 通过实现Comparator接口,实现自定义排序

*/

public class StringComparator implements Comparator{

/**

* 按字符串长度降序排序

*/

@Override

public int compare(String o1, String o2) {

return o1.length() > o2.length() ? -1 : 1;

}

}

2.1 数组使用StringComparator排序器

String[] strArr = new String[]{"zhangsan","lisi","wangwu"};

//自定义排序,按字符串长度升序

Arrays.sort(strArr,new StringComparator());

System.out.println("自定义排序,按字符串长度降序排序:");

for (String str:strArr) {

System.out.println(str);

}

2.2 集合使用StringComparator排序器

List strList = new ArrayList<>();

strList.add("zhangsan");

strList.add("lisi");

strList.add("wangwu");

//自定义排序,按字符串长度降序

Collections.sort(strList,new StringComparator());

System.out.println("自定义排序,按字符串长度降序排序:");

for (String str:strList) {

System.out.println(str);

}

以上两个例子都是输出:

98b3faf324a5

在这里插入图片描述

3.自定义类实现Comparable接口,使类具有排序功能

自定义Student类,实现Comparable接口,重写compareTo方法,按age升序排序

public class Student implements Comparable{

private String name;

private Integer age;

public Student(String name,Integer age){

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

/**

* 实现compareTo接口方法,按age升序。

* @param o

* @return 返回1:大于,0:等于,-1:小于

*/

@Override

public int compareTo(Student o) {

return Integer.compare(age,o.age);

}

/**

* 重写toString方法,方便System.out.println打印出详细的信息。

*/

@Override

public String toString() {

return "Student{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

}

3.1 Student数组按age升序排序

Student[] students = new Student[3];

students[0] = new Student("zhangsan",30);

students[1] = new Student("lisi",28);

students[2] = new Student("wangwu",33);

System.out.println("通过student实现的默认排序,根据age升序排序:");

Arrays.sort(students);

for (Student student : students) {

System.out.println(student);

}

3.2 Student集合按age升序排序

List studentList = new ArrayList<>();

studentList.add(new Student("zhangsan",30));

studentList.add(new Student("lisi",28));

studentList.add(new Student("wangwu",33));

System.out.println("通过student实现的默认排序,根据age升序排序:");

Collections.sort(studentList);

for (Student student : studentList) {

System.out.println(student);

}

以上两个例子都是输出:

98b3faf324a5

在这里插入图片描述

4.自定义排序器,按Student的name长度升序排序

创建自定义排序器StudentComparator

package com.simon.interfacedemo.sortdemo.studentdemo;

import java.util.Comparator;

/**

* @Description: 通过实现Comparator接口,实现自定义排序

*/

public class StudentComparator implements Comparator{

/**

* 按名字长度升序排序

*/

@Override

public int compare(Student o1, Student o2) {

return o1.getName().length() > o2.getName().length() ? 1 : -1;

}

}

4.1 数组使用StudentComparator排序器

Student[] students = new Student[3];

students[0] = new Student("zhangsan",30);

students[1] = new Student("lisi",28);

students[2] = new Student("wangwu",33);

System.out.println("通过自定义排序器实现的排序,根据名字长度排序:");

Arrays.sort(students,new StudentComparator());

for (Student student : students) {

System.out.println(student);

}

4.2 集合使用StudentComparator排序器

List studentList = new ArrayList<>();

studentList.add(new Student("zhangsan",30));

studentList.add(new Student("lisi",28));

studentList.add(new Student("wangwu",33));

System.out.println("通过自定义排序器实现的排序,根据名字长度排序:");

Collections.sort(studentList,new StudentComparator());

for (Student student : students) {

System.out.println(student);

}

以上两个例子都是输出:

98b3faf324a5

在这里插入图片描述

后续

以上列出了实际开发中可能用到的数组、集合的排序方式。使用lambda还可以更简化,后续再总结出来。

以上示例都可以通过我的GitHub获取完整的代码,点击获取

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值