在Java中按日期键排序地图

我正在尝试使用TreeMap按日期键在java中对地图进行排序。 这是我的代码

public static void sort() { BufferedReader br; String line; String[] data; Date date ; DateFormat df = new SimpleDateFormat("dd-mm-YYY"); Map map = new TreeMap(); try { br = new BufferedReader(new FileReader( "/home/user/Desktop/train/2013-training_set.txt")); int i=0; while ((line = br.readLine()) != null) { ++i; data = line.split(":"); map.put(df.parse(data[1]), line); } System.out.println(map.size()+" i = "+i); Set st = mp.entrySet(); Iterator it = st.iterator(); while (it.hasNext()) { Map.Entry me = (Map.Entry) it.next(); System.out.print(me.getKey() + "->:"); System.out.println(me.getValue()); } } catch (Exception e) { e.printStackTrace(); } } 

date[1]包含字符串格式的日期并且看起来像(例如21-3-2013)。 问题是它在TreeMap(mp)中只存储了12个键值对(每月一个)而不是103(i)。 有任何想法吗 ?

请参阅http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html 。

y表示年份,M表示年份,d表示日期。 具体来说,小写字母m是小时分钟,而大写字母M是月份。

它看起来像线条

data = line.split(“:”); map.put(df.parse(data [1]),line);

实际上只解析了一个月。 Line.split(“:”)将通过以下方式生成一个数组: 如果在数据文件中格式化日期dd:mm:yyyy,则生成的数组“data”应为{[dd],[mm],[yyyy]}。 所以数据[1]将只是月份。

我可能是错的,但我怀疑这就是为什么你只得到12个键值对; 你只解析了一个月,每当你得到一个新的月份密钥时,你就会覆盖旧密钥。