簡體   English   中英

HashMap / TreeMap對我的鍵進行排序

[英]HashMap/TreeMap sorting my keys

使用JSoup,我正在從一個提供花粉數據的網站上抓取一些數據。 他們沒有API訪問權限,所以抓取是我的最后選擇。

使用HashMap ,我存儲datepollenIndex ,這是當天花粉水平高到pollenIndex的范圍。

private static Map<String, String> pollenMap = new HashMap<String, String>();

這是我的Pollen類的構造函數的一部分。

for(int i = 0; i < 4; i++)
{
    Element dates = doc.select("td.text-center.even-four").get(i);
    Element levels = doc.select("td.levels").get(i);

    System.out.println(dates.text() + ", " + levels.text());

    pollenMap.put(dates.text(), levels.text());
}

一個問題是HashMap為我排序數據。 pollenMap的輸出是這樣的:

 : [Monday May 26, 2014, Wednesday May 28, 2014, Sunday May 25, 2014, Tuesday May 27, 2014]
 : [7.90, 6.60, 7.60, 8.80]

如您所見, HashMap我的dates鍵進行排序,導致Monday排在第一位, Tuesday最后。

我可能沒有正確使用HashMap ,所以我的朋友建議我使用TreeMap ,但是結果是這樣的:

 : [Monday May 26, 2014, Wednesday May 28, 2014, Sunday May 25, 2014, Tuesday May 27, 2014]
 : [7.90, 6.60, 7.60, 8.80]

如何在不對其進行排序的情況下使用此鍵值結構?

對於這個數據結構的新手問題深表歉意。 我可以使用兩個String列表,但是我想學習這些新的數據結構。

(1) java.util.HashMap不保證順序。

(2) java.util.SortedMap (例如java.util.TreeMap按鍵排序。 (在您的情況下,按字典順序對String鍵進行排序。)


如何在不對其進行排序的情況下使用此鍵值結構?

如果要按插入鍵值的順序迭代鍵值,則需要java.util.LinkedHashMap

此實現與HashMap的不同之處在於,它維護貫穿其所有條目的雙向鏈接列表。 此鏈表定義了迭代順序,通常是將鍵插入映射的順序(插入順序)。


OP不想保留插入順序。 他/她想要日期順序。

如果要按日期順序遍歷鍵值,請使用java.util.TreeMap ,但將String 解析Date

SimpleDateFormat format = new SimpleDateFormat("EEEEE MMMM d, yyyy");
for(int i = 0; i < 4; i++)
{
    Element dates = doc.select("td.text-center.even-four").get(i);
    Element levels = doc.select("td.levels").get(i);

    System.out.println(dates.text() + ", " + levels.text());

    pollenMap.put(format.parse(dates.text()), levels.text());
}

順便說一句,您可能希望對測量進行相同的操作,並將它們存儲為longjava.math.BigDecimal

HashMap不對數據排序; 哈希鍵將數據分配給存儲桶! 您可以創建鍵值類型並將數據存儲在ListStack 他們將保留您的廣告訂單。

您的問題是您正在使用String值來存儲日期和小數。 當您進行排序時,您的日期將按字母順序進行排序,在這種情況下,將星期一放在星期六之前,依此類推。

由於要在地圖中存儲日期數據和十進制數據,因此應將其設置為TreeMap<Date,BigDecimal>而不是TreeMap<String,String> 解析您的日期和小數,然后再將其放入地圖。 然后, TreeMap代碼將對它們正確排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM