- 浏览: 17812 次
- 性别:
- 来自: 武汉
最新评论
排序的算法是我们最常用的算法,初学程序,每个人都尝试过排序。但只是局限于简单的排序。
如将下列数字进行排序
1,3,5,8,3,6
于是我们得出结果
1,3,3,5,6,8
将下列字母(字符)进行排序
a,i,e,f,w,s
于是我们得出结果
a,e,f,i,s,w
但是我们遇到的情况就不是如此简单了。如给公司里的商品进行排序,我们很轻易的想到按照商品的名称排序不就完了,而且简单明了。但现实并如我们相信般简单。同一商品名称可以有不同的批次,进货时间,可能还会有单价的不同。显然只根据商品名称排序是不合理的。
再举个简单例子然后用程序实现。如公司要将员工进行排序(不要说领导排在前面),假设我们的需求比较复杂。先进行姓排序,谁的姓拼音靠前,谁就排前面。然后对名字进行排序。恩.如果同名,女性排前头。如果名字和性别都相同,年龄小的排前头。ok,一个也不算复杂的需求。
如果对java比较熟悉的会知道java.util.Comparator 接口。要实现里面的函数
int compare(Object o1, Object o2) 返回一个基本类型的整型,返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。
于是我们设计的人员类要有几个变量,firstname,lastname,sex,age分别表示姓,名,性别,年龄。
- public class Person {
- String firstname,lastname;
- Boolean sex;
- Integer age;
- public Person(String firstname,String lastname,Boolean sex,Integer age) {
- this.firstname = firstname;
- this.lastname = lastname;
- this.sex = sex;
- this.age = age;
- }
- public String getFirstName() {
- return firstname;
- }
- public String getLastName() {
- return lastname;
- }
- public Boolean getSex() {
- return sex;
- }
- public Integer getAge() {
- return age;
- }
- //为了输入方便,重写了toString()
- public String toString()
- {
- return firstname +" "+lastname+" "+(sex.booleanValue()?"男":"女")+" "+age;
- }
- }
- //end person
public class Person { String firstname,lastname; Boolean sex; Integer age; public Person(String firstname,String lastname,Boolean sex,Integer age) { this.firstname = firstname; this.lastname = lastname; this.sex = sex; this.age = age; } public String getFirstName() { return firstname; } public String getLastName() { return lastname; } public Boolean getSex() { return sex; } public Integer getAge() { return age; } //为了输入方便,重写了toString() public String toString() { return firstname +" "+lastname+" "+(sex.booleanValue()?"男":"女")+" "+age; } } //end person
下面是要实现比较器
- public class Comparators {
- public static java.util.Comparator getComparator() {
- return new java.util.Comparator() {
- public int compare(Object o1, Object o2) {
- if (o1 instanceof String) {
- return compare( (String) o1, (String) o2);
- }else if (o1 instanceof Integer) {
- return compare( (Integer) o1, (Integer) o2);
- }else if (o1 instanceof Person) {
- return compare( (Person) o1, (Person) o2);
- }else {
- System.err.println("未找到合适的比较器");
- return 1;
- }
- }
- public int compare(String o1, String o2) {
- String s1 = (String) o1;
- String s2 = (String) o2;
- int len1 = s1.length();
- int len2 = s2.length();
- int n = Math.min(len1, len2);
- char v1[] = s1.toCharArray();
- char v2[] = s2.toCharArray();
- int pos = 0;
- while (n-- != 0) {
- char c1 = v1[pos];
- char c2 = v2[pos];
- if (c1 != c2) {
- return c1 - c2;
- }
- pos++;
- }
- return len1 - len2;
- }
- public int compare(Integer o1, Integer o2) {
- int val1 = o1.intValue();
- int val2 = o2.intValue();
- return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1));
- }
- public int compare(Boolean o1, Boolean o2) {
- return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1));
- }
- public int compare(Person o1, Person o2) {
- String firstname1 = o1.getFirstName();
- String firstname2 = o2.getFirstName();
- String lastname1 = o1.getLastName();
- String lastname2 = o2.getLastName();
- Boolean sex1 = o1.getSex();
- Boolean sex2 = o2.getSex();
- Integer age1 = o1.getAge();
- Integer age2 = o2.getAge();
- return (compare(firstname1, firstname2) == 0 ?
- (compare(lastname1, lastname2) == 0 ? (compare(sex1, sex2) == 0 ? (compare(age1, age2) == 0 ? 0 :
- compare(age1, age2)) :
- compare(sex1, sex2)) :
- compare(lastname1, lastname2)) :
- compare(firstname1, firstname2));
- }
- };
- }
- }
public class Comparators { public static java.util.Comparator getComparator() { return new java.util.Comparator() { public int compare(Object o1, Object o2) { if (o1 instanceof String) { return compare( (String) o1, (String) o2); }else if (o1 instanceof Integer) { return compare( (Integer) o1, (Integer) o2); }else if (o1 instanceof Person) { return compare( (Person) o1, (Person) o2); }else { System.err.println("未找到合适的比较器"); return 1; } } public int compare(String o1, String o2) { String s1 = (String) o1; String s2 = (String) o2; int len1 = s1.length(); int len2 = s2.length(); int n = Math.min(len1, len2); char v1[] = s1.toCharArray(); char v2[] = s2.toCharArray(); int pos = 0; while (n-- != 0) { char c1 = v1[pos]; char c2 = v2[pos]; if (c1 != c2) { return c1 - c2; } pos++; } return len1 - len2; } public int compare(Integer o1, Integer o2) { int val1 = o1.intValue(); int val2 = o2.intValue(); return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1)); } public int compare(Boolean o1, Boolean o2) { return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1)); } public int compare(Person o1, Person o2) { String firstname1 = o1.getFirstName(); String firstname2 = o2.getFirstName(); String lastname1 = o1.getLastName(); String lastname2 = o2.getLastName(); Boolean sex1 = o1.getSex(); Boolean sex2 = o2.getSex(); Integer age1 = o1.getAge(); Integer age2 = o2.getAge(); return (compare(firstname1, firstname2) == 0 ? (compare(lastname1, lastname2) == 0 ? (compare(sex1, sex2) == 0 ? (compare(age1, age2) == 0 ? 0 : compare(age1, age2)) : compare(sex1, sex2)) : compare(lastname1, lastname2)) : compare(firstname1, firstname2)); } }; } }
以上代码有可能因为浏览器的布局自动换行。
compare(Person o1, Person o2)的返回值看起来比较别扭。最简单的是
- public int compare(Boolean o1, Boolean o2) {
- return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1));
- }
public int compare(Boolean o1, Boolean o2) { return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1)); }
o1和o2相等返回0,否则o1如果是true 就表示o1大于o2。
再尝试输出结果看看
- public class Main {
- public Main() {
- }
- public static void main(String[] args) {
- Person[] person = new Person[] {
- new Person("ouyang", "feng", Boolean.TRUE, new Integer(27)),
- new Person("zhuang", "gw", Boolean.TRUE, new Integer(27)),
- new Person("zhuang", "gw", Boolean.FALSE, new Integer(27)),
- new text.Person("zhuang", "gw", Boolean.FALSE, new Integer(2)),
- };
- for (int i = 0; i < person.length; i++) {
- System.out.println("before sort=" + person[i]);
- }
- java.util.Arrays.sort(person, Comparators.getComparator());
- for (int i = 0; i < person.length; i++) {
- System.out.println("after sort=" + person[i]);
- }
- }
- }
public class Main { public Main() { } public static void main(String[] args) { Person[] person = new Person[] { new Person("ouyang", "feng", Boolean.TRUE, new Integer(27)), new Person("zhuang", "gw", Boolean.TRUE, new Integer(27)), new Person("zhuang", "gw", Boolean.FALSE, new Integer(27)), new text.Person("zhuang", "gw", Boolean.FALSE, new Integer(2)), }; for (int i = 0; i < person.length; i++) { System.out.println("before sort=" + person[i]); } java.util.Arrays.sort(person, Comparators.getComparator()); for (int i = 0; i < person.length; i++) { System.out.println("after sort=" + person[i]); } } }
输出结果:
- before sort=ouyang feng 男 27
- before sort=zhuang gw 男 27
- before sort=zhuang gw 女 27
- before sort=zhuang gw 女 2
- after sort=ouyang feng 男 27
- after sort=zhuang gw 女 2
- after sort=zhuang gw 女 27
- after sort=zhuang gw 男 27
before sort=ouyang feng 男 27 before sort=zhuang gw 男 27 before sort=zhuang gw 女 27 before sort=zhuang gw 女 2 after sort=ouyang feng 男 27 after sort=zhuang gw 女 2 after sort=zhuang gw 女 27 after sort=zhuang gw 男 27
仔细理解java的Comparator会给你写排序带来很大帮助
发表评论
文章已被作者锁定,不允许评论。
相关推荐
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Centos7-离线安装redis
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
这个是一个JSP实现的在线仓库管理系统,管理员角色包含以下功能:仓库管理员登录,货品&类别信息管理,采购信息管理,出库和入库管理,财务信息管理,管理员管理等功能。 本项目实现的最终作用是基于JSP实现的在线仓库管理系统 分为1个角色 第1个角色为管理员角色,实现了如下功能: - 仓库管理员登录 - 出库和入库管理 - 管理员管理 - 财务信息管理 - 货品&类别信息管理 - 采购信息管理
开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我v:19306446185 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有! https://img-blog.csdnimg.cn/direct/e73dc0ac8d27434b86d886db5a438c71.jpeg
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
备自投tp.pptx
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
ai制作动物时装走秀-课程网盘链接提取码下载 .txt
箱式变压器的基础知识tp.pptx
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
这个是一个JSP校园二手物品交易信息平台,管理员登录,订单管理,二手交易管理,物品租借管理,物品分类管理,留言板管理,网站公告管理,用户信息管理等功能。用户角色包含以下功能:用户首页,二手物品查看,物品租借查看,优惠活动管理,我的二手交易,加入购物车,查看我的购物车等功能。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
埃森哲--xx市场营销再造项目gltp.pptx
大学生毕业设计、大学生课程设计作业
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
【资源说明】 基于python+pyqt的实时数据可视化精密加工机床主轴负载实时监控平台设计与测试具体实现数据采集与处理、实时数据可视化、数据库整合、用户交互等功能+全部资料齐全+部署文档 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).JAVA班主任管理系统(源代码+LW).
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。