对map创建出来的值顺序排序问题

TreeMap

在用Ajax动态创建checkBox时,而把值放在了HashMap中,hashMap是无序的,因此你动态创建出来的顺序是乱的,比如你想要的顺序是1、2、3、4但出来的结果可能是 3、2、1、4等,刚开始想在sql中进行排序,认为这样就可以进行排序,但结果还是没有进行排序,最后上网查资料发现要对Map进行排序,可以使用treeMap,
    private Map<String, String> sortedMap(Map<String, String> classMap2) {

TreeMap<String, String> result = new TreeMap<String, String>();

Object[] unsort_key = classMap2.keySet().toArray();

Arrays.sort(unsort_key);

for (int i = 0; i < unsort_key.length; i++) {

result.put(unsort_key[i].toString(), classMap2.get(unsort_key[i]));

}

return result.tailMap(result.firstKey());


这样你创建出来的map就是有序的了,在这里是默认对key进行排序的。
在这里必须使用TreeMap,因为HashMap是通过HashCode对其内容进行快速查找,而TreeMap中所有的元素则保持这某种固定的顺序。
但经常使用的是HashMap,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力。

时间: 2024-08-02 16:18:00

对map创建出来的值顺序排序问题的相关文章

springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序

springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序 http://www.360doc.com/content/14/0309/19/834950_359080244.shtml

C之旅(一)运算符——优先级,结合性和求值顺序

本节主要讲基本运算符的优先级,结合性和求值顺序.先看一个表达式- (1 + 2) * 3 + (4 + 5 * (6 + 7 ))记住你对它的运算过程,看完下面的内容之后,也许你会用不同的方式来看待这个表达式. 基本运算符 = + - * / C中没有指数运算.运算符操作的是操作数,操作数就是放在运算符两侧的东西. (1) 赋值运算符 = year = 2016; 读作将值2016赋给year,而非year等于2016.=将2016赋给变量year,是从右到左的,即=具有右结合性.2016 =

jsp页面使用el 按key获取map中的对应值

jsp页面使用el 按key获取map中的对应值 转自:<jsp页面使用el 按key获取map中的对应值>地址:http://blog.csdn.net/baple/article/details/18517359 jsp页面中的代码: <script type="text/javascript"> var msgTip = "${msgs['loginError']}"; alert(msgTip); </script> 注意

C语言对表达式的求值顺序不是明确规定的

讨论区看到的 WA来自那些递归下降求解的代码. 第一种情况,使用|| 和 &&: 例如s为所给串 int getval() { switch(s[c_s++]) { case 'p': return (value & (1 << 0))? 1:0; case 'q': return (value & (1 << 1))? 1:0; case 'r': return (value & (1 << 2))? 1:0; case 's'

黑马程序员_类对象创建代码的执行顺序测试总结

class StaticCode { // 类的非静态成员变量(实例变量)定义语句: // 作用:用来存储对象的特有数据的成员变量. // 运行:当类对象被创建时就执行,按照顺序自上而下执行,和构造代码块平级.(即当有多个构造函数 // 代码块和多个非静态成员变量时,JVM按照自上而下的顺序来执行所有语句,包括构造代码块里的代码 // 和非静态成员的声明.) // 存储位置:非静态变量位于堆内存中的对象实体中. int num = 3; // 构造代码块 { System.out.println

c++中函数参数的求值顺序

c++中如果函数的参数列表包含多个实参,那么对参数的求值顺序是不确定的. 在谭浩强的<C++程序设计>(第二版)P94中提到,GCC对参数求值是按从右到左的顺序求值的. 但我实测并非如此. #include <iostream> #include <iomanip> using namespace std; void test(int x, int y) { cout << 'x' << x << " y" <

Golang语句中的求值顺序

在Go specs中,有这样三点陈述: 1.变量声明(variable declaration)中的初始化表达式(initialization expressions)的求值顺序(evaluation order)由初始化依赖(initialization dependencies)决定:但对于初始化表达式内部的操作数的求值需要按照2中的顺序:从左到右: 2.在非变量初始化语句中,对表达式.赋值语句或返回语句中的操作数进行求值时,操作数中包含的函数(function)调用.方法(method)调

Map中按value值排序

大家都知道,在java中的集合Map中按键值key排序比较简单,只需引用集合TreeMap即可,可是怎样实现按value值排序呢?下面我们来测试一下: public class TestHashMap { public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); map.put("zhangsan", 1); map.pu

数组按照特定顺序排序问题

遇到数组按照特定顺序排序问题,比如查询出来的数组要按照特定的一个位置来放置时可以用到 例如:数组查询出来的为var var sortArr= ["3年","1年","2年"];,但是我们想让他an找standardArr= ["1年","2年","3年"]来排序,可以调用如下方法 sortCommon(sortArr,standardArr); function sortCommon(s