java—一种在Map中删除条目的方法

nfs0ujit  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(280)

有人告诉我应该删除Map的最后一个或第三个条目,但我找不到任何解决方法来解决这些问题,即如何获取特定条目并将其删除。
代码如下:

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)); 但还是不行。有没有可能的解决办法?请帮忙。

2mbi3lxu

2mbi3lxu1#

从迭代和从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();
    }
}

但是请注意,上述操作可以 O(n) 对于hashmap。 LinkedHashMap 正如其他人所指出的那样 O(1) 每次删除时间

km0tfn4u

km0tfn4u2#

我认为在你的例子中,直接删除最后一个条目就足够了,而不是在Map上循环寻找它。使用 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());
}
zzlelutf

zzlelutf3#

请使用linkedhashmap。它扩展了hashmap并按插入顺序维护Map中条目的链接列表。

Map<String, String> students = new LinkedHashMap <>();

相关问题