当前位置: 首页 > news >正文

Java比较器对数组,集合排序

Java比较器对数组,集合排序一
分类: Java 2010-06-07 11:32 329人阅读 评论(0) 收藏 举报
数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collator类及其子类RuleBasedCollator,能将排序发挥到极致。
1.默认规则的排序

[java:nogutter] view plaincopyprint?
String[] array = {"动作","剧情","情感","惊悚","动画","纪录"};
List<String> list = new ArrayList<String>(); //该List中放有和array数组同样的数据
Arrays.sort(array); //数组排序
Collections.sort(list); //集合排序

输出结果: 剧情-->动作-->动画-->情感-->惊悚-->纪录

很明显,不是我们要的结果,原因是系统并不知道按什么顺序去排,所以默认为按自然顺序处理。要达到我们的目的,就得指定相应的排序规则,如按照中文语言排序,请看下面。

2.带比较器的排序


[java] view plaincopyprint?
public MyComparator implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
return Collator.getInstance(Locale.CHINA).compare(o1, o2); //注意 :Locale.CHINA
}
}

排序:


[java] view plaincopyprint?
MyComparator myomparator = new MyComparator();
Array.sort( array, myomparator); //带比较器的数组排序
Collections.sort(list, myomparator); //带比较器的集合排序


输出结果: 动画-->动作-->纪录-->惊悚-->剧情-->情感
这次结果正确,而且从结果可以看出,该排序是稳定的。

总结:
排序器是需要指定语种的,如我们使用了Locale.CHINA,当然还有其它的,这样就做到了对中文按首字母排序的功能。可是需求往往是很神奇的,如要排序的不是字符串,而是对象,甚至这些对象是放在集合中,那么如何针对集合中的对象进行排序呢,请看下篇,Java集合排序Java比较器对数组,集合排序二。

相关文章:

  • ssh中配置log4j的方法
  • ebay的博客
  • 基于OAUTH的电子商务支付集成研究与实现
  • 支付系统监控实践
  • 改进你的网页
  • 在开发测试中使用HBaseMiniCluster
  • 使用JProfiler进行性能调优
  • DBA的新领域:调试Oracle(进阶篇)
  • Comet框架Pushlets的集成
  • 如何定制一个基于REST Service的ODBC驱动程序
  • Maven依赖版本冲突报告
  • Maven中的扁平化POM
  • 你好,HBase
  • Maven Build Tracking
  • 分布式文件系统概述
  • 【Linux系统编程】快速查找errno错误码信息
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Angular数据绑定机制
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • export和import的用法总结
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JS笔记四:作用域、变量(函数)提升
  • Linux Process Manage
  • PaddlePaddle-GitHub的正确打开姿势
  • Redash本地开发环境搭建
  • SwizzleMethod 黑魔法
  • underscore源码剖析之整体架构
  • vagrant 添加本地 box 安装 laravel homestead
  • webpack入门学习手记(二)
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 坑!为什么View.startAnimation不起作用?
  • 入手阿里云新服务器的部署NODE
  • 少走弯路,给Java 1~5 年程序员的建议
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 原生js练习题---第五课
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 自动记录MySQL慢查询快照脚本
  • 最近的计划
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​【已解决】npm install​卡主不动的情况
  • #HarmonyOS:软件安装window和mac预览Hello World
  • $GOPATH/go.mod exists but should not goland
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)fiber的基本认识
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (学习日记)2024.01.09
  • (译) 函数式 JS #1:简介
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道