如何重写它以获得结构化方式

时间:2019-01-19 00:25:28

标签: java hashmap linkedhashset

我正在使用Maps集合创建学生管理简单的Java项目,其中id是我的钥匙,名称,标记和手机号。是地图的值。那么如何以结构化方式打印它。

HashMap<Integer, LinkedHashSet<StudentCinstructor>> st = new HashMap<>();
LinkedHashSet<StudentCinstructor> st2 = new LinkedHashSet<>();

Scanner sc = new Scanner(System.in);
public void add() {
    System.out.println("enter the name of the student");
    String name = sc.nextLine();
    System.out.println("enter the marks of the student");
    double marks = sc.nextDouble();
    System.out.println("enter the mobile number of the student");
    long mobile_no = sc.nextLong();
    st2.add(new StudentCinstructor(name, marks, mobile_no));
    System.out.println("enter the unique id of the student");
    int id = sc.nextInt();
    st.put(id, st2);

使用自定义类,当我尝试在主要方法中打印它时,会给我一个带有哈希码的地址。 “ HashmapDemo.MethodsForManagement@3d4eac69”

2 个答案:

答案 0 :(得分:0)

两句话:

1-当您尝试打印对象StudentCinstructor时,如果没有专用的toString()方法,则不会得到结构良好的输出。因此,您需要为类编写一个toString()方法,然后可以打印到控制台。 示例:

public static String toString() {
     return "Customize here + Put this method inside your class";
}

2-我不明白为什么您要使用LinkedHashSet存储StudentCinstructor对象,然后将此HashSet存储在地图中,而不是创建StudentCinstructor对象并将其存储在如果所有学生都有唯一的ID,则直接在地图上显示。 如:

HashMap<Integer, StudentCinstructor> st = new HashMap<>();

答案 1 :(得分:0)

查看打印输出“ HashmapDemo.MethodsForManagement@3d4eac69”,似乎您正在打印类HashmapDemo.MethodsForManagement的对象。如果要打印StudentCinstructor的对象,则需要将该对象传递给System.out.println(student);之类的打印方法。

您需要重写toString()类中的StudentCinstructor方法。 (即,将代码放在StudentCinstructor类的下面。)

(以下代码中的{namemarksmobile_noStudentCinstructor类中的字段。)

  @Override
  public String toString()
  {
    return "Name=" + name + ", Marks=" + marks + ", Mobile number=" + mobile_no;
  }