如何使用linkedhashmap从java hashmap中删除最后一个输入?

6bc51xsx  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(920)

这个问题在这里已经有答案了

java linkedhashmap获取第一个或最后一个条目(15个答案)
26天前关门了。
我需要从hashmap中删除最后一个输入,然后添加一个新的输入。我听说你可以用linkedhashmap来做,但是具体怎么做呢?说明中没有提到我应该使用linkedhashmap,但是显然,如果没有它,就不可能从hashmap中删除最后一项。
或者,如果您有任何替代解决方案可以删除最后一项,以便我可以添加其他输入,请告诉我应该向代码中添加什么。
以下是我想做的:

  1. package studentlist;
  2. import java.util.LinkedHashMap;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.Scanner;
  6. public class StudentList {
  7. public static void main(String[] args) {
  8. Map<String, String> students = new HashMap<>();
  9. Scanner s = new Scanner(System.in);
  10. for(int i=1; i<= 3; i++){
  11. System.out.print("Enter student number " + i + ": ");
  12. String es = s.nextLine();
  13. System.out.print("Enter student first name " + i + ": ");
  14. String en = s.nextLine();
  15. students.put(es, en);
  16. }
  17. for (Map.Entry mp : students.entrySet()) {
  18. System.out.println(mp.getKey() + " " + mp.getValue());
  19. }
  20. //The 3rd input should be removed before this:
  21. System.out.print("Enter your student number: ");
  22. String sn = s.nextLine();
  23. System.out.print("Enter your first name: ");
  24. String fn = s.nextLine();
  25. students.put(sn, fn);
  26. for (Map.Entry mp : students.entrySet()) {
  27. System.out.println(mp.getKey() + " " + mp.getValue());
  28. }
  29. }
  30. }
jobtbby3

jobtbby31#

只是一些想法:
在存储最后输入的学生的位置保留一个变量
保留2个结构(列表和Map)
将linkedhashmap迭代到末尾以查找最后一个条目。

yhxst69z

yhxst69z2#

的javadoc Map 说:
map接口提供了三个集合视图,允许将map的内容视为一组键、一组值或一组键值Map。Map的顺序定义为Map集合视图上的迭代器返回其元素的顺序。一些map实现,比如 TreeMap 对其订单作出具体保证;其他人,比如 HashMap 同学们,不要。
的javadoc LinkedHashMap 说:
[linkedhashmap]维护一个贯穿其所有条目的双链接列表。这个链表定义了迭代顺序,通常是键插入到Map中的顺序(插入顺序)。请注意,如果将键重新插入到Map中,则插入顺序不受影响(钥匙 k 重新插入Map m 如果 m.put(k, v) 在以下情况下调用 m.containsKey(k) 会回来的 true 在调用之前。)
因此,要删除最后一个插入的(不是重新插入的)条目,请使用3个迭代器中的任意一个,跳到末尾,然后删除该条目:

  1. static <K, V> Entry<K, V> removeLast(LinkedHashMap<K, V> map) {
  2. Iterator<Entry<K, V>> entryIter = map.entrySet().iterator();
  3. if (! entryIter.hasNext())
  4. return null;
  5. Entry<K, V> entry;
  6. do {
  7. entry = entryIter.next();
  8. } while (entryIter.hasNext());
  9. entryIter.remove();
  10. return entry;
  11. }

测试

  1. LinkedHashMap<String, String> map = new LinkedHashMap<>();
  2. map.put("A", "1");
  3. map.put("E", "5");
  4. map.put("B", "2");
  5. map.put("D", "4");
  6. map.put("E", "6"); // Re-insert
  7. map.put("C", "3");
  8. for (int i = 0; i < 7; i++)
  9. System.out.println(removeLast(map));

输出

  1. C=3
  2. D=4
  3. B=2
  4. E=6
  5. A=1
  6. null
  7. null

没有人说它会很快,但这将是如何做到这一点,只有一个 Map . 如果您需要删除多个条目而不在其中插入新条目,则特别有用。
根据需要,最好只记住侧面的最后一个键。这样,您就可以快速删除最后一个插入的键,但不能通过执行两次“删除最后一个”来删除最后一个键。

展开查看全部

相关问题