日期:2014-05-17  浏览次数:20792 次

Map按key排序,key以时间来保存,求助。
现在有个小功能
从数据库中查出来的数据按照时间升序排列,order by DATE_FORMAT(recu_date, '%y-%m-%d') ,
依次把数据存储到HashMap中,
mapObj.put("date", rs.getString("INITTIME"));
mapObj.put("allDayNumber", String.valueOf(rs.getInt("TOTAL_NUM")));
mapObj.put("allNumber", String.valueOf(rs.getInt("TOTAL_ACCUMULATE_NUM")));
mapAll.put(rs.getString("INITTIME"), mapObj);
key值是数据中的时间,全部存储之后,打印map的值,并不是按照插入的顺序排列,现在需要按照key的值来依次读取出来,应该怎么做?查了资料,说TreeMap是自动排序的,但是不是按照时间排序,求助啊


------解决方案--------------------
Map是什么?
散列表呀,是根据hashcode大小的顺序排列的(排列顺序和你存放的顺序不一样)
默认的hashcode值就是内存的地址(当然你可以覆盖它)
总之:你不能按照key的值来读出来,只能用迭代器一个个遍历出来,
顺序和你存放的顺序肯定不一样。

如果你想按照顺序存进去和读出来,那就用list集合吧
------解决方案--------------------
LinkedHashMap map = new LinkedHashMap();
这个貌似是按插入顺序来的
------解决方案--------------------
建议用TreeMap,会根据Key来自动进行排序。

但Key必须是能进行比较的。
------解决方案--------------------
如果是要根据放进去的顺序取出来,用LinkedMap吧,这个问题我遇到过
------解决方案--------------------
本来就很简单,你只需要保证Key所存的元素可以进行大小比较就行了。

你这个例子是借助了字符串的大小比较能力,唯一需要注意的是:
2012-7-1 必须要成为 2012-07-01
------解决方案--------------------
你这里使用的是 Arrays.sort(key);进行排序的,跟HashMap没关系的啊。。。HashMap有自己的储存机制