概述:
1.本文阐述对List(Array乱入)的排序问题。
2.Set和Map的排序 可使用TreeSet、TreeMap,见本博客的相关文章(下面提供连接)。
3.想对一个List进行排序有2种方法(数组也适用):
方法一:实现一个比较器Comparator。
方法二:List中的对象实现Comparable接口的compareTo方法。
4.完成上面一点后,集合使用Collections.sort,数组使用Arrays.sort进行排序。
package com.cxy.collection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; /** * @author cxy */ public class ListSortTest { public static void main(String[] args) { List <Student> l=new ArrayList(); Student s1 =new Student("小明",76); Student s2 =new Student("小黑",99); Student s3 =new Student("小白",60); l.add(s1); l.add(s2); l.add(s3); System.out.print("List排序前:"); System.out.println(l); //第一种方式:普通的对象,然后实现一个比较器,使用下面的方法进行排序 Collections.sort(l,new StudentComparator()); System.out.print("List排序后:"); System.out.println(l); System.out.println("======================="); //乱入的数组 Student[] sa={s1,s2,s3}; System.out.print("数组排序前:"); System.out.println(sa[0].toString()+sa[1]+sa[2]); Arrays.sort(sa,new StudentComparator()); System.out.print("数组排序后:"); System.out.println(sa[0].toString()+sa[1]+sa[2]); System.out.println("============下面的都是ComparableStudent演示==========="); //对象自身拥有排序能力 List<ComparableStudent> l1=new ArrayList(); ComparableStudent s11 =new ComparableStudent("较劲的小明",76); ComparableStudent s22 =new ComparableStudent("较劲的小黑",99); ComparableStudent s33 =new ComparableStudent("较劲的小白",60); //PS:较劲的意思可以理解为 争强好胜 o_o l1.add(s11); l1.add(s22); l1.add(s33); System.out.print("List排序前:"); System.out.println(l1); Collections.sort(l1); System.out.print("List排序后:"); System.out.println(l1); System.out.println("======================="); //数组再次乱入 ComparableStudent[] cs={s11,s22,s33}; System.out.print("数组排序前:"); System.out.println(cs[0].toString()+cs[1]+cs[2]); Arrays.sort(cs); System.out.print("数组排序后:"); System.out.println(cs[0].toString()+cs[1]+cs[2]); } } //一个普通的学生类,按照学生的学习成绩进行排序 //这里只是为了快速展示排序而设计的“简陋”的类,所以不要追究 你这个类设计的不科学,成员变量应该私有等问题。 class Student { public String name; //姓名 public int score; //分数 Student(String name,int score) { this.name=name; this.score=score; } @Override public String toString() { return "["+name+":"+score+"]"; } } //一个学生的比较器,泛型定义了比较的范围是Student,也可以不定义泛型,再在compare里面进行强制转换 class StudentComparator implements Comparator<Student> { @Override public int compare(Student s1, Student s2) { if(s1.score>s2.score) return 1; else if(s1.score<s2.score) return -1; else return 0; } } /** * 一个实现了Comparable接口的compareTo方法的学生类 * compareTo的实现方式: * x.compareTo(y)为例,当x小于y的时候,返回一个负数。当x大于y的时候,返回一个正数。相等的时候返回0. */ class ComparableStudent implements Comparable<ComparableStudent> { public String name; //姓名 public int score; //分数 ComparableStudent(String name,int score) { this.name=name; this.score=score; } @Override public int compareTo(ComparableStudent s) { if(score>s.score) return 1; else if(score<s.score) return -1; else return 0; } @Override public String toString() { return "["+name+":"+score+"]"; } }
PS:这里将很多类写在了一个文件里,目的就是为了方便大家拷贝参考。使用时不需要分开 直接拷贝运行。
相关文章连接:
声明:
1.原创文章,转载请标明并加本文连接。
2.更详尽的API请参见 http://docs.oracle.com/javase/7/docs/api/
3.文章反映个人愚见,如有异议欢迎讨论指正
相关推荐
在实际应用中,选择合适的排序算法主要依据数据规模和初始状态。对于小规模数据(例如n≤50),直接插入排序和直接选择排序是不错的选择。如果数据基本有序,直接插入或冒泡排序可能更有效。对于大规模数据,最好...
### Java 中文姓氏排序详解 #### 一、引言 在处理中文数据时,我们经常需要对含有中文姓名的数据进行排序。Java 提供了多种方式进行排序,包括使用 `Collections.sort()` 方法配合自定义比较器(`Comparator`)。...
Java 八大排序 Java 八大排序是 Java 语言中八种常用的排序算法,分别是直接插入排序、希尔排序...这些排序算法都是 Java 语言中常用的排序算法,每种算法都有其优缺,选择合适的排序算法取决于具体的应用场景和需求。
在Java编程语言中,对包含中文、数字和字母的数据进行排序是一项常见的任务。这个场景下,我们关注的是如何实现一个自定义的排序规则,按照数字、字母和汉字的顺序进行排列。以下是对这一主题的详细解释。 首先,...
本项目“java图形界面排序小应用”结合了GUI技术与排序算法,提供了三种不同的排序方法供用户选择并可视化地展示排序过程。以下是这个项目涉及的主要知识点: 1. **Java Swing库**:Java Swing库是Java Foundation ...
Java汉字笔画排序是一种在处理汉字时按照汉字的笔画数量进行排序的技术。这个主题主要涉及到计算机科学中的数据结构和算法应用,特别是排序算法。在中文环境中,有时我们需要按照汉字的笔画数量来对汉字进行排序,这...
冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python实现冒泡排序算法 冒泡排序:应用Java和Python...
**JAVA版BM25排序模型详解** BM25(Best Match 25)是一种在信息检索领域广泛应用的文档排名算法,它基于TF-IDF(词频-逆文档频率)理论,但进行了改进,能更好地考虑文档长度的影响。在这个JAVA版的实现中,我们...
在实际应用中,为了避免二叉排序树退化,可以采用平衡二叉树,如AVL树或红黑树。这些平衡二叉树在每次插入或删除后都会自动调整,以确保树的高度保持在一个较小的范围内,从而保证操作效率。 总之,二叉排序树是...
在Java编程语言中,数组排序是一项基础且重要的任务。它涉及到不同的算法,这些...在实际应用中,还可以考虑使用Java的内置排序方法`Arrays.sort()`,它使用了一种高效的快速排序变体,但具体实现细节则由JVM实现决定。
在编程领域,排序算法是数据结构与算法学习中的基础部分,它们用于整理...在实际应用中,根据数据特性选择合适的排序算法至关重要。在Java编程中,理解这些排序算法的实现和性能特点,有助于写出高效、适应性强的代码。
冒泡排序是最简单的排序算法之一,通过不断交换相邻的逆序元素来逐步排序。其时间复杂度为O(n^2),适用于小规模或部分有序的数据。 2. 插入排序(Insertion Sort) 插入排序通过构建有序序列,对于未排序数据,在已...
以上三个知识点总结了关于 Java 排序的一些基本应用,包括基础的冒泡排序算法、使用标准库 `Collections.sort()` 进行排序以及使用 `RuleBasedCollator` 实现国际化排序等。这些技术对于编写高效、可维护的 Java ...
堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和...
不过,可以根据上下文推断,“鲢”可能是指“希尔排序”或“堆排序”,而“快速排序”是一种高效的排序算法,在实际应用中非常广泛。 ### 三、代码示例分析 #### 1. 生成随机数组 ```java public int[] create...
希尔排序的时间复杂度在最坏情况下为O(n^1.5),但在实际应用中通常优于插入排序。 4. **快速排序(Quick Sort)**: 快速排序由C.A.R. Hoare在1960年提出,其基本思想是选取一个基准值,将数组分为小于基准值和大于...
在实际编程中,Java还提供了其他的排序算法实现,如`Arrays.sort()`方法,它是基于快速排序和插入排序的混合算法,性能优于冒泡排序,适用于大多数情况。然而,理解并实现冒泡排序有助于初学者掌握排序算法的基本...
在编程领域,排序算法是数据结构与算法学习中的重要组成部分,尤其在Java中,...在`AllSort`这个压缩包中,可能包含了这八种排序算法的Java实现代码,通过阅读和理解这些代码,可以加深对排序算法的理解和应用能力。
在实际应用中,我们通常会根据具体场景选择更适合的排序算法,例如快速排序、归并排序等,它们在处理大数据量时具有更好的性能。 总结来说,Java实现冒泡排序主要涉及数组操作、循环结构以及条件判断。理解冒泡排序...