如何删除Hashmap中的对象

时间:2016-12-19 06:10:55

标签: java loops if-statement hashmap do-while

我试图找到一种方法来删除Hashmap中的学生。我的尝试是在(选择== 8)。不幸的是,在我尝试删除学生(以及他/她的测验分数)后,名称仍然显示。任何帮助将非常感激。

package studentquizgrades;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class StudentQuizGrades {

public static void main(String[] args) {
    Map<String, Student> map = new HashMap<>();

    addStudent(map);

}

private static void addStudent(Map<String, Student> map) {
    Scanner userInput = new Scanner(System.in);

    boolean finish = false;


    do {
        System.out.println("Please choose an option: ");
        System.out.println("Add student and quizzes - 1, Get all quiz scores - 2, Get highest quiz score- 3, ");
        System.out.println("Get lowest quiz score - 4, Get class average - 5, View a list of all students - 6");
        System.out.println("Get a student's quiz scores - 7, Delete student- 8, Quit - 9");
        int choice = userInput.nextInt();

        if (choice == 1) {
            Set<String> keySet = map.keySet();
            System.out.println("How many students would you like to add?");
            int numberOfStudents = userInput.nextInt();
            for (int counter = 0; counter < numberOfStudents; counter++) {

                System.out.println("ENTER NAME");
                Scanner addName = new Scanner(System.in);
                String name = (addName.nextLine());

                System.out.println("Enter First Quiz Score");
                Scanner addQuiz1 = new Scanner(System.in);
                int quiz1 = (addQuiz1.nextInt());

                System.out.println("Enter Second Quiz Score");
                Scanner addQuiz2 = new Scanner(System.in);
                int quiz2 = (addQuiz2.nextInt());

                System.out.println("Enter Third Quiz Score");
                Scanner addQuiz3 = new Scanner(System.in);
                int quiz3 = (addQuiz3.nextInt());
                Student student = new Student(name, quiz1, quiz2, quiz3);
                map.put(student.getKey(), student);

            }

        } else if (choice == 2) {
            Set<String> keySet = map.keySet();
            for (String currentKey : keySet) {
                Student student = map.get(currentKey);
                System.out.println();
                System.out.println(currentKey);
                System.out.println(Arrays.toString(student.getQuizGrades()));
                System.out.println();

            }

        } else if (choice == 3) {
            Set<String> keySet = map.keySet();
            int max = 0;
            String maxName = null;

            for (String currentKey : keySet) {

                Student student = map.get(currentKey);
                int[] scores = student.getQuizGrades();

                for (int counter = 1; counter < scores.length; counter++) {
                    if (scores[counter] > max) {
                        max = scores[counter];
                        maxName = currentKey;
                    }
                }
            }
            System.out.println();
            System.out.println("The highest quiz score was " + max + "; his/her name is " + maxName);
            System.out.println();

        } else if (choice == 4) {
            Set<String> keySet = map.keySet();
            int min = Integer.MAX_VALUE;
            String minName = null;

            for (String currentKey : keySet) {
                Student student = map.get(currentKey);
                int index = 0;
                int[] scores = student.getQuizGrades();

                for (int counter = 0; counter < scores.length; counter++) {
                    if (scores[counter] < min) {
                        minName = currentKey;
                        min = scores[counter];

                    }

                }

            }
            System.out.println();
            System.out.println("The lowest quiz score was " + min + "; his or her name is " + minName);
            System.out.println();

        } else if (choice == 5) {
            Set<String> keySet = map.keySet();
            int[] allGrades;
            int sum = 0;
            int counter2 = 0;
            for (String currentKey : keySet) {
                Student student = map.get(currentKey);
                int[] scores = student.getQuizGrades();
                for (int counter = 0; counter < scores.length; counter++) {
                    int j = scores[counter];
                    sum = sum + j;
                    counter2++;
                }

            }
            int average = sum / counter2;
            System.out.println("");
            System.out.println("The class average is: " + average);
            System.out.println("");
        } else if (choice == 6) {
            Set<String> keySet = map.keySet();
            System.out.println("");
            System.out.println("List of students: ");
            for (String currentKey : keySet) {
                Student student = map.get(currentKey);

                System.out.println(currentKey);

            }
        } 
        else if(choice == 7){


            Set<String> keySet = map.keySet();
            System.out.println("");
            System.out.println("Please enter a student's name: ");
            String studentName = userInput.next();
            for (String currentKey : keySet) {

                Student student = map.get(currentKey);

                if(studentName.equals(currentKey)){

                    System.out.println(currentKey + "'s quiz scores:");
                    int [] quizArray = student.getQuizGrades();
                    for(int counter1 = 0; counter1 < quizArray.length; counter1++ ){

                        System.out.println(quizArray[counter1]);

                    }
                }

            }
        }


                    else if(choice == 8){


            Set<String> keySet = map.keySet();
            System.out.println("");
            System.out.println("Please enter a student's name: ");
            String studentName = userInput.next();
            for (String currentKey : keySet) {

                Student student = map.get(currentKey);

                if(studentName.equals(currentKey)){

                    student = null;
                }

            }
        }


        else if (choice == 9) {
            finish = true;
            break;
        }
    } while (finish == false);
}
}

public class Student {
private String key;
private int grade1;
private int grade2;
private int grade3;

    public Student(String key, int grade1, int grade2, int grade3){
        this.key = key;
        this.grade1 = grade1;
        this.grade2 = grade2;
        this.grade3 = grade3;
    }

    public String getKey(){
        return key;
    }

    public int[] getQuizGrades(){
       int [] anArray = {grade1, grade2, grade3};
       return anArray;
    }

    public int getAverageScore(){
        int average = (grade1 + grade2 + grade3)/3;
        return average;
    }
}

2 个答案:

答案 0 :(得分:1)

 Student student = map.get(currentKey);

 if(studentName.equals(currentKey)){

     student = null;
 }

student置为空并不意味着map中的对象已被删除或删除。 它只是意味着名字为student的引用不再指向任何对象。

您应该查看Java API。 https://docs.oracle.com/javase/7/docs/api/

https://docs.oracle.com/javase/7/docs/api/java/util/Map.html#remove(java.lang.Object)

答案 1 :(得分:1)

Student student = map.get(currentKey); //将地图值(学生)分配给本地学生变量 如果(studentName.equals(currentKey)){  student = null; //为该本地Student变量赋值null,因此它不会在现有映射中更新 }

put map.put(currentKey,null)//将null更新为map (要么) map.remove(currentKey)//从地图中删除条目