【问题标题】:How to remove a value from a hashmap?如何从哈希图中删除一个值?
【发布时间】:2015-09-03 04:05:58
【问题描述】:

问题是,我有一个包含 2 个组的 ExpandableListView,在每个组内我都有一些用户,当我点击这些用户时,我会获取他们的 id 并添加到字符串的 HashMap,现在我正在尝试删除这些我第二次单击它们时的 ids,但第二组的 ids 没有被删除。这是我想要做的:

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));
    }
}

型号:

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;
    }


}

【问题讨论】:

    标签: java android arrays dictionary arraylist


    【解决方案1】:

    我假设您指的是这一行:

    aMap.remove(alunos);
    

    ...这是您尝试从HashMap 中删除的唯一位置。

    如果是这样,问题是您没有将正确的参数值传递给aMap.remove()。该方法要求您传递key 值,例如IdEscola 是什么,这是您在HashMap 中用来执行put 的键值。

    但是,您传递的是 alunos,我不太确定那是什么,但它看起来像一个学生列表。

    所以我认为你想做的只是简单地做aMap.remove(IdEscola)

    编辑:我现在意识到你的 hashmap 是由学校输入的,所以我改变了答案。

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

    【讨论】:

    • 是的,你认为没问题,但我怎样才能遍历 alunos?
    • @WARpoluido - alunos 是一个 GPEscolas 对象,您没有将其包含在此处,那么我们该如何提供帮助?
    • @WARpoluido:我调整了我的答案,现在我更好地理解了你的意图。只需执行aMap.remove(IdEscola)。我很确定这就是您的本意。
    【解决方案2】:

    如果您的 key objectsputting(aMap.put(IdEscola, mGpsEscolas)) 和 getting (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 来检索它,即使它们在逻辑上是相同的。

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多