一.理论准备

Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。

TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。

Map.Entry返回Collections视图。

二.key排序

TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,如下:

import java.util.Comparator;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

import java.util.TreeMap;

public class TreeMapTest {

public static void main(String[] args) {

Map map = new TreeMap(

new Comparator() {

public int compare(String obj1, String obj2) {

// 降序排序

return obj2.compareTo(obj1);

}

});

map.put("b", "ccccc");

map.put("d", "aaaaa");

map.put("c", "bbbbb");

map.put("a", "ddddd");

Set keySet = map.keySet();

Iterator iter = keySet.iterator();

while (iter.hasNext()) {

String key = iter.next();

System.out.println(key + ":" + map.get(key));

}

}

}

运行结果如下:

d:aaaaa

c:bbbbb

b:ccccc

a:ddddd

三.value排序

上面例子是对根据TreeMap的key值来进行排序的,但是有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要借助于Collections的sort(List list, Comparator super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较,如下:

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.TreeMap;

public class TreeMapTest {

public static void main(String[] args) {

Map map = new TreeMap();

map.put("a", "ddddd");

map.put("c", "bbbbb");

map.put("d", "aaaaa");

map.put("b", "ccccc");

//这里将map.entrySet()转换成list

List> list = new ArrayList>(map.entrySet());

//然后通过比较器来实现排序

Collections.sort(list,new Comparator>() {

//升序排序

public int compare(Entry o1,

Entry o2) {

return o1.getValue().compareTo(o2.getValue());

}

});

for(Map.Entry mapping:list){

System.out.println(mapping.getKey()+":"+mapping.getValue());

}

}

}

运行结果如下:

d:aaaaa

c:bbbbb

b:ccccc

a:ddddd

这个结合mysql取得行号并排序来讲解

package mysqlTest;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.TreeMap;

public class mysqlTest2 {

public static void main(String arg[]) {

try {

Connection con = null; // 定义一个MYSQL链接对象

Class.forName("com.mysql.jdbc.Driver").newInstance(); // MYSQL驱动

con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/Demo", "root", "root"); // 链接本地MYSQL

Statement stmt; // 创建声明

stmt = con.createStatement();

String str = "Select name,(@rowNum:=@rowNum+1) as rowNo,score From mysqlSort,"

+ "(Select (@rowNum :=0) ) b Order by mysqlSort.score Desc";

ResultSet res = stmt.executeQuery(str);

Map map = new TreeMap();

while (res.next()) {

map.put(res.getString(1), res.getInt(2));

}

Map map1 = new TreeMap();

for (Map.Entry m : map.entrySet()) {

map1.put(m.getKey(), m.getValue());

}

List> list = new ArrayList>(map1.entrySet());

Collections.sort(list, new Comparator>() {

public int compare(Entry o1, Entry o2) {

// TODO Auto-generated method stub

return o2.getValue()-o1.getValue();

}

});

for (Map.Entry m : map.entrySet()) {

System.out.println(m.getKey() + ":" + m.getValue());

}

System.out.println("============");

for (Map.Entry m : list) {

System.out.println(m.getKey() + ":" + m.getValue());

}

} catch (Exception e) {

System.out.print("MYSQL ERROR:" + e.getMessage());

}

}

}

mysql 取得行号后再排序

标签:

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://www.cnblogs.com/chengpeng15/p/5975815.html

mysql排序行号_mysql 取得行号后再排序相关推荐

  1. mysql 分组行号_mysql 显示行号,以及分组排序

    建表: CREATE TABLE `my_tb` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_code` varchar(255) DEFAULT ...

  2. mysql如何使用命令行操作_MySQL命令行基本操作

    本文记录的是windows7系统下Mysql的命令行基本操作. 一.MySQL启动与登录 1. MySQL启动: 通过运行mysql安装目录下的/bin/mysqld.exe文件来启动Mysql服务. ...

  3. mysql 行号_mysql的行号问题

    1.行号问题行号是指按顺序为查询结果集的行分配的连续整数.Mysql数据库在行号方面的支持并不是十分友好,没有橡其他数据库一样提供类似的row_number解决方案,因此得到行号是一个十分有技巧的问题 ...

  4. mysql 命令行访问_Mysql 命令行模式访问操作mysql数据库操作

    使用环境 在cmd模式下输入 mysql --version (查看mysql安装的版本). 完整的命令可以通过mysql --help来获取. 本测试使用的Mysql版本是mysql5, 本测试使用 ...

  5. mysql命令行语句_MySql命令行命令和SQL语句

    一.常用mysql命令行命令 1.启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2.netstat -na|findstr 3306 查看被监听 ...

  6. mysql账户最小授权_mysql 创建帐号并授权

    数据库安装请参考:http://youngbrick.iteye.com/blog/2335851 创建数据库: MariaDB [mysql]> create database mydbtes ...

  7. mysql生成行号_MySQL生成行号

    引言 在mysql数据库使用过程中,发现没有像db2那样方便能自动生成行号,于是通过网络查阅资料,现整理如下,方便以后自己查阅. 创建数据库 CREATE DATABASE -- 创建数据库 IF N ...

  8. mysql数据库管理系统模式_MYSQL命令行模式管理MySql的一点心得

    MYSQL命令行模式管理MySql的一点心得 MYSQL命令行模式管理MySql的一点心得 MySql数据库是中小型网站后台数据库的首选,因为它对非商业应用是免费的.网站开发者可以搭建一个" ...

  9. mysql导入指定数据库_mysql命令行导入sql文件到指定数据库的方法

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 第四章: ls 有一些我们常用的参数, 比如我们要知道当前目录的所有内容, 包括隐藏文件夹和文件和所有属性, 例 [roo ...

最新文章

  1. openoj的一个小比赛(F题解题报告)poj3978(dp+素数筛选)
  2. nssl1187-排列【dp,随机卡常,树状数组】
  3. 论文浅尝 | KGAT: 用于推荐的知识图注意力网络
  4. 知识图谱最新权威综述论文解读:知识图谱补全部分
  5. (计算机组成原理)第二章数据的表示和运算-第二节2:原码、反码、补码和移码的作用
  6. 《论文笔记》Robust Cooperative UAV Visual SLAM
  7. Redis解决秒杀中一人一单问题
  8. luasql在Fedora20下的安装与使用示例
  9. 发一个招聘启事,成都有兴趣的朋友可以来看一看。
  10. linux网络编程(一)
  11. 极验验证码(6.0.9)破解(一) 之 抓包分析
  12. [4G5G专题-106]:部署 - LTE无线网络规划与设计概览
  13. ios设置tabbar背景颜色_IOS UITabBarViewController 修改背景颜色
  14. CNN模型压缩——使用网络稀疏化方法(Learning Effcient Convolutional Network through Network Sliming)
  15. everything无法搜索刚插入的硬盘中的文件
  16. java自动拼图_java 拼图游戏完整源码,图片剪切,包含拼图自动还原功能
  17. 未来教育二级mysql怎么做题_计算机二级买了未来教育,但是不知道该怎么学习,就是单纯的刷题吗?感觉没有书有点不习惯,怎么办?...
  18. [Python] 七段数码管绘制
  19. 李宏毅《机器学习》误差
  20. MATLAB simulink 模型验证学习笔记

热门文章

  1. Java 的发展(历史)轨迹和历史变迁
  2. Tableau数据分析:NC Retail Order Data(英)Data Science Program Lab#1(GTI)
  3. html中如何让字段闪烁,Javascript结合CSS实现边框闪烁提示
  4. java 网页正文抽取算法_网页正文抽取算法 ContentExtractor
  5. php mysql会员注册_PHP实现会员注册系统
  6. 用ubuntu远程连接mysql_Ubuntu 安装 MySQL 和远程连接
  7. rk3288 android编译环境搭建,RK3288系统编译及环境搭建
  8. 自学python在家怎么上班_【经验分享】转行如何自学Python并且找到工作,分享自己心得...
  9. linux删除文件夹和文件
  10. OpenCV学习(二十) :分水岭算法:watershed()