TreeSet和删除特定的未命名对象

时间:2013-08-11 23:39:58

标签: java object tree set

所以我正在编写一个程序,用于将患者存储到TreeSet中。我遇到的问题是我必须实施一种方法从TreeSet中释放一名患者。

for(int i = 0; i < 10 ; i++){
        Random ag = new Random();
        int age = ag.nextInt(99) + 1;
        Names randomname = Names.getRandom();
        String name = randomname.name();
        String sex;
        if(Math.random() > 0.5)sex = "female";
        else sex = "male";
        Random sn = new Random();
        int serial = sn.nextInt(10000) + 1;
        Address randomAddress = Address.getRandom();
        String address = randomAddress.name();
        Hospital.admitPatient(new Patient(age, name, sex, serial, Birthday.produceBirthday(), address));
    }

那就是我如何循环以获取患者对象的患者信息和统计数据。 admit patient方法将它们添加到TreeSet中。

public static void admitPatient(Patient obj){
    if(numofPatients < maxPatients){
        patientList1.add(obj);
    }
}

我遇到的问题是患有放电患者的方法。我不知道在方法中放什么

public static void dischargePatient(What do i put here in the driver when i call this method?){
    patientList1.remove(w/e i put up there);

}

由于我没有在创建患者时将患者命名为对象,而只是将它们直接插入TreeSet中,因此在调用放电患者方法时我不确定如何调用它们。

1 个答案:

答案 0 :(得分:2)

由于您通常希望使用选定的对象(患者)而不是整个列表,因此您需要一种以某种方式识别它们的方法(例如通过名称或ID)。

由于addremove相似,因此您的dischargePatient方法也会相似。尝试

public static void dischargePatient(Patient patient) {
     patientList1.remove(patient);
}

要检索具有特定ID的患者,您可以遍历您的设置并将其返回:

public Patient getPatientByID(String id) {
    for (Patient patient : patientList1) {
        if (patient.getID().equals(id)) {
            return patient;
        }
    }
}

要移除ID为“1234abc”的患者,您可以执行以下操作:

dischargePatient(getPatientByID("1234abc"));

使用此模式,可以重建地图数据结构的功能。因此,使用Map(例如HashMap&lt;&gt;)可能更好。代码将简化为以下操作:

Map<String, Patient> patients = new HashMap<>();
patients.put("1234abc", patient1);  
patients.remove("1234abc");

您的示例的完整代码:

public static void admitPatient(Patient patient) {
    if(numofPatients < maxPatients){
        patients.put(patient.getID(), patient);
    }
}

public static void dischargePatient(String id) {
    patients.remove(id);
}