这个问题在这里已经有答案了:
java linkedhashmap获取第一个或最后一个条目(15个答案)
26天前关门了。
我需要从hashmap中删除最后一个输入,然后添加一个新的输入。我听说你可以用linkedhashmap来做,但是具体怎么做呢?说明中没有提到我应该使用linkedhashmap,但是显然,如果没有它,就不可能从hashmap中删除最后一项。
或者,如果您有任何替代解决方案可以删除最后一项,以便我可以添加其他输入,请告诉我应该向代码中添加什么。
以下是我想做的:
package studentlist;
import java.util.LinkedHashMap;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class StudentList {
public static void main(String[] args) {
Map<String, String> students = new HashMap<>();
Scanner s = new Scanner(System.in);
for(int i=1; i<= 3; i++){
System.out.print("Enter student number " + i + ": ");
String es = s.nextLine();
System.out.print("Enter student first name " + i + ": ");
String en = s.nextLine();
students.put(es, en);
}
for (Map.Entry mp : students.entrySet()) {
System.out.println(mp.getKey() + " " + mp.getValue());
}
//The 3rd input should be removed before this:
System.out.print("Enter your student number: ");
String sn = s.nextLine();
System.out.print("Enter your first name: ");
String fn = s.nextLine();
students.put(sn, fn);
for (Map.Entry mp : students.entrySet()) {
System.out.println(mp.getKey() + " " + mp.getValue());
}
}
}
2条答案
按热度按时间jobtbby31#
只是一些想法:
在存储最后输入的学生的位置保留一个变量
保留2个结构(列表和Map)
将linkedhashmap迭代到末尾以查找最后一个条目。
yhxst69z2#
的javadoc
Map
说:map接口提供了三个集合视图,允许将map的内容视为一组键、一组值或一组键值Map。Map的顺序定义为Map集合视图上的迭代器返回其元素的顺序。一些map实现,比如
TreeMap
对其订单作出具体保证;其他人,比如HashMap
同学们,不要。的javadoc
LinkedHashMap
说:[linkedhashmap]维护一个贯穿其所有条目的双链接列表。这个链表定义了迭代顺序,通常是键插入到Map中的顺序(插入顺序)。请注意,如果将键重新插入到Map中,则插入顺序不受影响(钥匙
k
重新插入Mapm
如果m.put(k, v)
在以下情况下调用m.containsKey(k)
会回来的true
在调用之前。)因此,要删除最后一个插入的(不是重新插入的)条目,请使用3个迭代器中的任意一个,跳到末尾,然后删除该条目:
测试
输出
没有人说它会很快,但这将是如何做到这一点,只有一个
Map
. 如果您需要删除多个条目而不在其中插入新条目,则特别有用。根据需要,最好只记住侧面的最后一个键。这样,您就可以快速删除最后一个插入的键,但不能通过执行两次“删除最后一个”来删除最后一个键。