## 集合排序
~~~java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* 集合排序
* @author 一教室
*
*/
public class CollectionSort {
public static void main(String[] args) {
//如果集合中存储的是基本数据类型的包装类
List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(7);
list.add(2);
list.add(5);
list.add(1);
list.add(11);
list.add(22);
System.out.println("list排序前的顺序" + list);
Collections.sort(list);//根据元素的自然顺序对指定列表按升序进行排序。
System.out.println("list排序后的顺序" + list);
//如果集合中存储的是字符串
List<String> list2 = new ArrayList<String>();
list2.add("3");
list2.add("7");
list2.add("2");
list2.add("5");
list2.add("1");
list2.add("11");
list2.add("22");
list2.add("212");
list2.add("31");
System.out.println("list2排序前的顺序" + list2);
Collections.sort(list2);//字符串是按照其首字母对应的ASCII(Unicode)码值进行排序的。
System.out.println("list2排序后的顺序" + list2);
//存储中文字符串
List<String> list3 = new ArrayList<String>();
list3.add("赵");
list3.add("钱");
list3.add("孙");
list3.add("李");
list3.add("周");
list3.add("吴");
list3.add("郑");
list3.add("王");
System.out.println("list3排序前的顺序" + list3);
Collections.sort(list3);//字符串是按照对应的ASCII(Unicode)码值字典顺序进行排序的。
System.out.println("list3排序后的顺序" + list3);
}
}
~~~
~~~java
public class Student implements Comparable<Student> {
private String name;
private String code;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(String name, String code, int age) {
super();
this.name = name;
this.code = code;
this.age = age;
}
public Student() {
super();
}
@Override
public String toString() {
return "Student [姓名=" + name + ", 学号=" + code + ", 年龄=" + age + "]";
}
/**
* 如果compareTo方法返回值为0,表示当前对象等于stu(参数对象);
* 如果compareTo方法返回值为负数,表示当前对象小于stu;
* 如果compareTo方法返回值为整数,表示当前对象大于stu
* @param stu
* @return
*/
@Override
public int compareTo(Student stu) {
//按照学号升序排列
String sCode = stu.getCode();
String code = this.code;
//比较sCode和code的大小,compareTo()方法
int result = code.compareTo(sCode);
return result;
}
}
~~~
~~~java
import java.util.Comparator;
/**
* Comparator接口的泛型,传入的是想要进行比较的类型
* @author 一教室
*
*/
public class StuComparator implements Comparator<Student> {
/**
* compare方法,此方法的方法体是Student类进行排序的依据
* 如果compare方法返回值是正整数,说明arg0大于arg1,则arg0排在arg1后面(arg0 > arg1)
* 如果compare方法返回值是0,说明arg0等于arg1,则arg0和arg1位置不变(arg0 = arg1)
* 如果compare方法返回值是负整数,说明arg0小于arg1,则arg0排在arg1前面(arg0 < arg1)
*/
@Override
public int compare(Student arg0, Student arg1) {
/*String name0 = arg0.getName();
String name1 = arg1.getName();*/
/**
* compareTo方法,不过是用来比较此处的姓名,是String类的方法
* 如果参数字符串name1等于此字符串name0,则返回0(name0 = name1)
* 如果参数字符串name1小于此字符串name0,则返回正整数(name0 > name1)
* 如果参数字符串name1大于此字符串name0,则返回负整数(name0 < name1)
* 这里的大于小于等于,指的是按照字典顺序比较
*/
/*int result = name0.compareTo(name1);
return (-1)*result;*/
int age0 = arg0.getAge();
int age1 = arg1.getAge();
int result = age1 - age0;
return result;
}
}
~~~
~~~java
import java.util.Comparator;
public class StringComparator implements Comparator<String> {
//自己设置一个字典
String[] familyName = {"赵","钱","孙","李","周","吴","郑","王"};
public static int getIndex(String[] arr, String value) {
for (int i = 0; i < arr.length; i++) {
if (arr[i].equals(value)) {
return i; //字符串时,换为 equals
}
}
return -1;//如果未找到返回-1
}
@Override
public int compare(String o1, String o2) {
int index1 = StringComparator.getIndex(familyName, o1);//该方法返回元素在数组中的索引
int index2 = StringComparator.getIndex(familyName, o2);
int result = index1 - index2;
return result;
}
}
~~~
~~~java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ClassSort {
public static void main(String[] args) {
//按照学生姓名进行升序排列
Student xcl = new Student("徐春林", "j121001", 23);
Student lwx = new Student("陆文鑫", "j121002", 25);
Student gjn = new Student("高峻楠", "j121003", 21);
Student xs = new Student("徐爽", "j121004", 22);
List<Student> list = new ArrayList<Student>();
list.add(lwx);
list.add(xs);
list.add(xcl);
list.add(gjn);
System.out.println("排序前的顺序:");
for(Student stu : list) {
System.out.println(stu);
}
//Collections.sort(list, new StuComparator());//此处要将排序的依据(匿名对象,实现Comparator接口)传入sort方法
Collections.sort(list);
System.out.println("排序后的顺序:");
for(Student stu : list) {
System.out.println(stu);
}
List<String> list2 = new ArrayList<String>();
list2.add("赵");
list2.add("周");
list2.add("孙");
list2.add("钱");
list2.add("李");
list2.add("郑");
list2.add("王");
list2.add("吴");
System.out.println("list2排序前的顺序:");
for(String str : list2) {
System.out.println(str);
}
Collections.sort(list2, new StringComparator());
System.out.println("list2排序后的顺序:");
for(String str : list2) {
System.out.println(str);
}
}
}
~~~
- 课程开始
- 第一课20191008
- 第二课20191009
- HTML
- CSS
- CSS第一课
- CSS第二课
- CSS第三课
- CSS第四课
- CSS第五课
- JavaScript
- Js第一课
- Js第二课
- Js第三课
- Js第四课
- Js第五课
- Js第六课
- Js第七课
- Js-事件模型
- Js-2019-10-31-标准库
- Js-2019-11-01- 标准库
- Js-2019-11-01-Json
- Js-2019-11-01-对象的创建
- Js-2019-11-04-this的使用
- Js-2019-11-05-storage与异常
- Js-2019-11-05-BOM与补充知识点
- Js-2019-11-06-正则表达式和计时器
- jQuery
- jQuery-2019-11-13-初识jQuery
- jQuery-2019-11-14-jQuery节点操作
- jQuery-2019-11-15-jQuery节点操作二
- jQuery-2019-11-16-jQuery效果与动画
- Java
- Java-2019-11-27-变量直接量数据格式运算符
- Java-2019-11-28-流程控制
- Java-2019-12-02-数组
- Java-2019-12-04 面向对象
- Java-2019-12-05-封装
- Java-2019-12-06-深入构造器
- Java-2019-12-09-继承
- Java-2019-12-10-多态
- Java-2019-12-10-包装类
- Java-2019-12-11-final修饰符
- Java-2019-12-11-包装类
- Java-2019-12-11-接口
- java-2019-12-13-设计模式
- Java-2019-12-16-集合框架
- Java-2019-12-18-集合排序
- Java-2019-12-23-常用类学习
- Java-2019-12-25-异常处理
- Java-2019-12-31-内部类详解
