zl程序教程

您现在的位置是:首页 >  后端

当前栏目

利用Java中的现有方法实现对集合元素进行排序

JAVA方法集合排序 实现 利用 进行 元素
2023-09-11 14:15:14 时间

利用Java中的现有方法实现对集合元素进行排序。

(1) Collections.sort(集合名); 如果参与排序的集合中存储的是自定义类型的对象,则对象对应类需要实现java.lang.Comparable接口,同时实现接口中 compareTo(Tt)方法指定排序规则。—》内置比较器。

			public class TestSort {
			public static void main(String[] args) {
			ArrayList<Student> list = new
			ArrayList<Student>
			();
			list.add(new Student("zihao",38,99.0));
			list.add(new
			Student("jingjing",18,95.0));
			list.add(new
			Student("zihang",48,89.0));
			list.add(new Student("zibo", 42,
			88.0));
			list.add(new Student("jintao", 42,
			90.0));
			list.add(new Student("wenwen", 42,
			89.0));
			list.add(new Student("awei", 42,
			89.0));
			Collections.sort(list);
			for(Student s:list) {
			System.out.println(s);
			}
			}
			}
			public class Student implements
			Comparable<Student>{
			private String name;
			private Integer age;
			private Double score;
			public Student() {
			super();
			}
			public Student(String name,Integer
			age,Double score) {
			super();
			this.name = name;
			this.age = age;
			this.score = score;
			}
			public String getName() {
			return name;
			}
			public void setName(String name) {
			this.name = name;
			}
			public Integer getAge() {
			return age;
			}
			public void setAge(Integer age) {
			this.age = age;
			}
			public Double getScore() {
			return score;
			}
			public void setScore(Double score) {
			this.score = score;
			}
			@Override
			public String toString() {
			return "Student [name=" + name + ",
			age=" + age +
			", score=" + score + "]";
			}
			@ Override
			public int compareTo(Student s) {
			/* 将 this 和 s 对象进行比较
			* 指定排序规则:age
			* this.age 大于 s.age 1
			* this.age 小于 s.age -1
			* this.age 等 于 s.age 0
			* 如果年龄相同时,再按照 成绩进行
			排序
			*/
			if(this.age > s.age) {
			return 1;
			}else if(this.age<s.age) {
			return -1;
			}else {
			// return 0;
			if(this.score>s.score) {
			return 1;
			}else if(this.score<s.score) {
			return -1;
			}else {
			// return 0;
			return
			this.name.compareTo(s.name);
			}
			}
			}
			}

(2) List接口中提供 默认方法 sort(Comparator c):如果参与排序的集合存储的是自定义类型的对象,则需要在参与比较的对象以外的地方定义一个匿名内部类(或是Lambda表达式)实现 java.util.Comparator接口,同时实现 compare(T t1,Tt2)方法指定排序规则。—》外置比较器.

			
			public class TestSort2 {
			public static void main(String[] args) {
			List<Worker> list = new
			ArrayList<Worker>();
			list.add(new
			Worker("zihao",38,20000.0));
			list.add(new
			Worker("awei",35,19000.0));
			list.add(new
			Worker("xingwang",48,25000.0));
			list.add(new
			Worker("jintao",37,18000.0));
			// 制定的比较规则 -->匿名内部类
			// Comparator<Worker> c = new
			Comparator<Worker>() {
			// public int compare(Worker w1,Workerw2) {
			// /* 将 w1 和 w2进行 比较:按照年龄
			// * w1.age 大于w2.age 1
			// * w1.age 小于w2.age -1
			// * 等于0
			// */
			// if(w1.getAge()>w2.getAge()) {
			// return 1;
			// }else if(w1.getAge()<w2.getAge()) {
			// return -1;
			// }else {
			// return 0;
			// }
			// }
			// };
			// Lambda表达式
			Comparator<Worker> c = (w1,w2) ->{
			if(w1.getAge()>w2.getAge()) {
			return 1;
			}else if(w1.getAge()<w2.getAge()) {
			return -1;
			}else {
			return 0;
			}
			};
			list.sort(c);
			for(Worker w:list) {
			System.out.println(w);
			}
			}
			}
			public class Worker {
			private String name;
			private Integer age;
			private Double salary;
			public Worker() {
			super();
			
			}
			public Worker(String name,Integer
			age,Double salary) {
			super();
			this.name = name;
			this.age = age;
			this.salary = salary;
			}
			public String getName() {
			
			return name;
			}
			public void setName(String name) {
			this.name = name;
			}
			public Integer getAge() {
			return age;
			}
			public void setAge(Integer age) {
			this.age = age;
			}
			public Double getSalary() {
			return salary;
			}
			public void setSalary(Double salary) {
			this.salary = salary;
			}
			@Override
			public String toString() {
			return "Worker [name=" + name + ",
			age=" + age + ", salary=" + salary + "]";
			}
			}

补充:
Collections工具类
(1) 位于java.util包中对集合元素进行操作的工具类。

(2) 功能方法:

a. static void reverse(List list):将集合中元素进行倒置
b. static void shuffle(List list):对集合中元素进行随机显示
c. static void sort(List list):对集合元素进行排序。

:如果参与排序的集合中存储的是自定义类型的对象,则对象对应类需要实现java.lang.Comparable接口,同时实现接口中 compareTo方法指定排序规则。