一种删除地图中条目的方法
A way to remove an entry in maps
有人告诉我应该删除映射的最后一个或第三个条目,但我找不到任何关于如何获取特定条目并将其删除的解决方案。
代码如下:
Scanner reader = new Scanner(System.in);
String input1, input2;
Map<String, String> students = new HashMap<>();
for(int i = 1; i <= 3; i++){
System.out.print("Enter student number " + i + ": ");
input1 = reader.next();
System.out.print("Enter first name " + i + ": ");
input2 = reader.next();
students.put(input1, input2);
}
System.out.println("Student List:");
for(Map.Entry entry: students.entrySet()){
System.out.println(entry.getKey() + " - " + entry.getValue());
}
我试过使用 students.remove(students.get(3), students.get(3));
但它仍然不起作用。有没有可能的解决方案?请帮忙
请使用 LinkedHashMap.It 扩展 HashMap 并按照插入顺序维护映射中条目的链接列表。
Map<String, String> students = new LinkedHashMap <>();
来自 iterating over and removing from a map 示例:
Map<String, String> map = new HashMap<String, String>() {
{
put("test", "test123");
put("test2", "test456");
}
};
for(Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext(); ) {
Map.Entry<String, String> entry = it.next();
if(entry.getKey().equals("test")) {
it.remove();
}
}
你可以这样做
int size = map.entrySet();
int i = 0;
for(Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext(); i++) {
Map.Entry<String, String> entry = it.next();
if(i == size - 1) { // last
// if(i == 2) { // 3rd
it.remove();
}
}
不过注意上面的操作对于hashmap可以O(n)
。 LinkedHashMap
正如其他人指出的那样,每次删除时间
可以有一个 O(1)
我认为在你的情况下,直接删除最后一个条目可能就足够了,而不是遍历地图试图找到它。打印条目时使用 LinkedHashMap
保留顺序:
Scanner reader = new Scanner(System.in);
String input1, input2;
LinkedHashMap<String, String> students = new LinkedHashMap<>();
String last = null;
for (int i = 1; i <= 3; i++) {
System.out.print("Enter student number " + i + ": ");
input1 = reader.next();
System.out.print("Enter first name " + i + ": ");
input2 = reader.next();
students.put(input1, input2);
if (i == 3) {
last = input1;
}
}
students.remove(last);
System.out.println("Student List:");
for (Map.Entry entry: students.entrySet())
System.out.println(entry.getKey() + " - " + entry.getValue());
}
有人告诉我应该删除映射的最后一个或第三个条目,但我找不到任何关于如何获取特定条目并将其删除的解决方案。
代码如下:
Scanner reader = new Scanner(System.in);
String input1, input2;
Map<String, String> students = new HashMap<>();
for(int i = 1; i <= 3; i++){
System.out.print("Enter student number " + i + ": ");
input1 = reader.next();
System.out.print("Enter first name " + i + ": ");
input2 = reader.next();
students.put(input1, input2);
}
System.out.println("Student List:");
for(Map.Entry entry: students.entrySet()){
System.out.println(entry.getKey() + " - " + entry.getValue());
}
我试过使用 students.remove(students.get(3), students.get(3));
但它仍然不起作用。有没有可能的解决方案?请帮忙
请使用 LinkedHashMap.It 扩展 HashMap 并按照插入顺序维护映射中条目的链接列表。
Map<String, String> students = new LinkedHashMap <>();
来自 iterating over and removing from a map 示例:
Map<String, String> map = new HashMap<String, String>() {
{
put("test", "test123");
put("test2", "test456");
}
};
for(Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext(); ) {
Map.Entry<String, String> entry = it.next();
if(entry.getKey().equals("test")) {
it.remove();
}
}
你可以这样做
int size = map.entrySet();
int i = 0;
for(Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext(); i++) {
Map.Entry<String, String> entry = it.next();
if(i == size - 1) { // last
// if(i == 2) { // 3rd
it.remove();
}
}
不过注意上面的操作对于hashmap可以O(n)
。 LinkedHashMap
正如其他人指出的那样,每次删除时间
O(1)
我认为在你的情况下,直接删除最后一个条目可能就足够了,而不是遍历地图试图找到它。打印条目时使用 LinkedHashMap
保留顺序:
Scanner reader = new Scanner(System.in);
String input1, input2;
LinkedHashMap<String, String> students = new LinkedHashMap<>();
String last = null;
for (int i = 1; i <= 3; i++) {
System.out.print("Enter student number " + i + ": ");
input1 = reader.next();
System.out.print("Enter first name " + i + ": ");
input2 = reader.next();
students.put(input1, input2);
if (i == 3) {
last = input1;
}
}
students.remove(last);
System.out.println("Student List:");
for (Map.Entry entry: students.entrySet())
System.out.println(entry.getKey() + " - " + entry.getValue());
}