能夠搜索TreeMap<Date, String>
的鍵(如NavigableMap<Date, String>
)的正確方法是什麼?我想在哪一個月查看並輸出所有那些月份?使用Date作爲鍵的樹形圖Java
例如,如果它看起來像下面那樣,我將如何能夠搜索所有那些密鑰2月?
Date date1 = dateformat.parse("8 January 2013");
能夠搜索TreeMap<Date, String>
的鍵(如NavigableMap<Date, String>
)的正確方法是什麼?我想在哪一個月查看並輸出所有那些月份?使用Date作爲鍵的樹形圖Java
例如,如果它看起來像下面那樣,我將如何能夠搜索所有那些密鑰2月?
Date date1 = dateformat.parse("8 January 2013");
如果使用NavigableMap
實現,你可以打電話subMap
得到兩個鍵之間的映射關係的視圖:
DateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy");
//using TreeMap for example
NavigableMap<Date, String> stringsByDate = new TreeMap<Date, String>();
//populate map
Date jan15th = dateFormat.parse("15 January 2013");
Date feb12th = dateFormat.parse("12 February 2013");
Date feb24th = dateFormat.parse("24 February 2013");
Date march18th = dateFormat.parse("18 March 2013");
stringsByDate.put(jan15th, "foo");
stringsByDate.put(feb12th, "bar");
stringsByDate.put(feb24th, "baz");
stringsByDate.put(march18th, "qux");
//define "from" and "to" keys
Date feb1st = dateFormat.parse("1 February 2013");
Date march1st = dateFormat.parse("1 March 2013");
//get the specified view
NavigableMap<Date, String> febStringsByDate = stringsByDate.subMap(
feb1st,
true, //include Feb 1st
march1st,
false //don't include March 1st
);
//prints {Tue Feb 12 00:00:00 EST 2013=bar, Sun Feb 24 00:00:00 EST 2013=baz}
System.out.println(febStringsByDate);
由於展現了「從」,並在通話「到」使用的密鑰到subMap
本身不需要包含在地圖中。
注:這將僅適用於特定月,例如日期工作2013年2月。如果您需要全部二月份日期的條目,則需要逐年迭代併合並結果。
首先,Date是可變的,並且使用可變對象作爲Map中的鍵,不推薦使用。
但要回答你的問題:你需要迭代你的地圖上的鍵,並根據給定的標準檢查每個鍵。您可以將日期換成Calendar
類,以使日,月,年和...比較更容易。
提及可變日期對象的+1。當在Map或HashSet中用作鍵時,它可能會導致棘手的問題。 – JoG
只是有同樣的問題,花了一些時間來弄清楚爲什麼它不工作。
它簡單地比較了各個日期對象的散列,即使日期相等,它們也是不同的。
我嘗試使用下面的數據結構
SortedMap<Date,List<String>>
,但它不允許多個成員添加到列表中的map.get(日期)始終返回null即使有那裏已經是同一天了。
這正是我一直在尋找的謝謝。 – Melky