簡體   English   中英

從HashMap中刪除最后一個元素

[英]Remove last element from HashMap

我正在嘗試從中刪除最后一個元素

Map<String, List<String>> map = new HashMap<String, List<String>>();

我的代碼是

StringTokenizer stheader = new StringTokenizer(value.toString(),",");
while (stheader.hasMoreTokens()){
    String tmp = stheader.nextToken();
    header.add(tmp);
    System.out.println("tmp"+header);
    map.put(tmp, new ArrayList<String>());
    }
System.out.println(map.size());

輸出:

tmp[Sepal_Length, Sepal_Width, Petal_Length, Petal_Width, Class]
map{Petal_Width=[], Class=[], Petal_Length=[], Sepal_Length=[], Sepal_Width=[]}

我想從maptmp刪除鍵Class []。

我嘗試使用.remove()但沒有任何反應。

HashMap沒有順序,因此,您不能刪除最后一項。 使用LinkedHashMap具有插入順序。

您實際上有兩個集合,因此如果要刪除"Class"元素,則需要在兩個集合中這樣做。 如果您總是關心兩個集合中始終刪除tmp最后一個元素,並且假設headerList<String> ,則應該執行以下操作:

String keyToRemove = header.remove(header.size()-1);
map.remove(keyToRemove);

HashMap不會根據索引排列其元素,但是您只能根據其key檢索元素,因此,如果必須使用HashMap ,則必須為其鍵添加一個增量索引,因此在放置新元素時該索引以1遞增,然后將鍵放入HashMap ,如下所示:

Map<Map<int,String>, List<String>> map = new HashMap<Map<int,String>, List<String>>();
int index = 0;
StringTokenizer stheader = new StringTokenizer(value.toString(),",");
while (stheader.hasMoreTokens()){
    String tmp = stheader.nextToken();
    header.add(tmp);
    System.out.println("tmp"+header);
    Map<int, String> temp_map = new HashMap<int, String>();
    temp_map.put(index, tmp);
    index ++;
    map.put(temp_map, new ArrayList<String>());
    }

然后您可以檢查結尾處的index值,它將是最后一個元素的索引。

@Unmesha SreeVeni:使用LinkedHashMap刪除最后一個元素,因為HashMap不會維護元素的插入順序。

暫無
暫無

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

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