如何从hashmap中删除值?

时间:2015-06-17 18:39:35

标签: java android arrays dictionary arraylist

问题是,我有一个包含2个组的ExpandableListView,在每个组内部我有一些用户,当我点击这些用户时,我得到他们的ID并添加到字符串的HashMap,现在我正在尝试删除这些我第二次点击它们时会显示ID,但第二组的ID不会被删除。这是我正在尝试做的事情:

aMap = new HashMap < String, GPSEscolas > ();
TextView idAluno = (TextView) v.findViewById(R.id.idcrianca);
TextView idEscola = (TextView) v.findViewById(R.id.idescola);

IdEscola = String.valueOf(idEscola.getText());
IdAluno = String.valueOf(idAluno.getText());


mGpsEscolas = aMap.get(IdEscola);
if (mGpsEscolas == null) {
    mGpsEscolas = new GPSEscolas();
    aMap.put(IdEscola, mGpsEscolas);
    mGpsEscolas.getIds_alunos().add(String.valueOf(IdAluno));
    mGpsEscolas.setAlunos(IdAluno);

} else {


    Set < String > ia = mGpsEscolas.getIds_alunos();


    if (!ia.contains(IdAluno)) {
        ia.add(String.valueOf(IdAluno));

    } else {
        alunos = aMap.get(IdEscola).getAlunos();
        ia.remove(IdAluno);

        aMap.remove(alunos);

    }

    stringArray = new String[ia.size()];
    out = "";
    if (ia.size() > 0) {

        for (String str: ia.toArray(stringArray)) {
            out += ";" + str;
        }

        aMap.get(IdEscola).setAlunos(out.substring(1));
    }
}

MOdel:

public class GPSEscolas  implements Serializable{

    private static final long serialVersionUID = 1L;


    private Integer id_escola;
    private Set<String> ids_alunos = new TreeSet<String>();
    private String Alunos;
    private double distancia;
    private Float latitude;
    private Float longitude;


    public String getAlunos() {
        return Alunos;
    }

    public void setAlunos(String alunos) {
        Alunos = alunos;
    }

    public Integer getId_escola() {
        return id_escola;
    }

    public void setId_escola(Integer id_escola) {
        this.id_escola = id_escola;
    }

    public Set<String> getIds_alunos() {
        return ids_alunos;
    }

    public void setIds_alunos(Set<String> ids_alunos) {
        this.ids_alunos = ids_alunos;
    }

    public double getDistancia() {
        return distancia;
    }

    public void setDistancia(double distancia) {
        this.distancia = distancia;
    }

    public Float getLatitude() {
        return latitude;
    }

    public void setLatitude(Float latitude) {
        this.latitude = latitude;
    }

    public Float getLongitude() {
        return longitude;
    }

    public void setLongitude(Float longitude) {
        this.longitude = longitude;
    }


}

2 个答案:

答案 0 :(得分:1)

我假设您指的是这一行:

document.getElementById("divID").textContent

...这是您尝试从aMap.remove(alunos); 中删除的唯一地方。

如果是这种情况,则问题是您没有将正确的参数值传递给HashMap。该方法希望您传递aMap.remove()值,例如key所用的值,这是您在IdEscola中执行put时使用的关键值。

但相反,你正在传递HashMap,我无法确定这是什么,但它看起来像是学生名单。

所以我认为你想要做的只是做alunos

编辑:我现在意识到你的哈希地图是由学校键入的,所以我改变了我的答案。

编辑2:如果上述内容不符合您的要求,那么您可能不想从该HashMap中删除任何内容。

答案 1 :(得分:0)

如果您的关键对象不同,而放置(aMap.put(IdEscola,mGpsEscolas))和获取(aMap.get(IdEscola) ).getAlunos())是两个不同的对象,然后hashmap将返回null,即使它们在逻辑上是相同的值。

在java中读取对象类,它是equals()和hashcode()函数,hashmap类使用它。

Student A= new Student ("ram");
Student B= new Student ("ram");
map.put(A,"10");

map.get(B) will return null.

如果使用对象A作为键将一些元素放入地图中,那么即使它们在逻辑上相同,也无法使用对象B来检索它。