ArrayList .contains()无效

时间:2015-07-06 20:52:04

标签: java android arraylist equals hashcode

我有这个消息数组,我想用API调用获得的新消息来更新它。我正在遍历我得到的数组,然后检查消息是否已经在ArrayList中。如果没有,我将其添加到列表中。

但是,由于某些未知原因,它不起作用。它复制了列表中的所有项目,但新项目永远不会存在。我无法弄清楚我的equals()hashCode()实施有什么问题。

    @Override
    public boolean equals(Object object) {
        boolean result = false;
        if (object == null || object.getClass() != getClass()) {
            result = false;
        } else {
            Message mess = (Message) object;
            if (this.id == mess.getId() && this.extid == mess.getExtid()) {
                result = true;
            }
        }

        return result;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 7 * hash + this.id.hashCode();
        hash = 7 * hash + this.extid.hashCode();
        return hash;
    }

populateData()

    private void populateData(String response) {
        try {
            JSONObject jsonObject = new JSONObject(response);
            JSONArray ArrayMessages = jsonObject.getJSONArray("messages");

            Gson gson = new Gson();

            Message[] messages = gson.fromJson(ArrayMessages.toString(), Message[].class);

            for (Message message : messages) {
                if(!messageList.contains(message)) {
                    messageList.add(message);
                }
            }

            adapter.notifyDataSetChanged();
        } catch (JSONException e) {
            e.printStackTrace();
        }

1 个答案:

答案 0 :(得分:1)

idextId的类型是什么?您应该将它们与equals()而不是==进行比较,并且使用set将避免必须检查该元素是否已经在集合中,因为集合不允许重复。