Fai*_*ikh 2 java android iterator arraylist
如果新列表有新条目然后生成通知,但每次我在旧列表中找到所有值.
public void populateList(String result) {
    ArrayList<User> tmp;
    tmp = list;
    list.clear();
    try {
        JSONArray jsonArray = new JSONArray(result);
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject json_data = jsonArray.getJSONObject(i);
            String NAME = json_data.getString(StaticMember.NAME);
            String STATUS = json_data.getString(StaticMember.STATUS);
            list.add(new User(NAME, STATUS));
        }
        ArrayList tmpN = list;
        compare(tmp, tmpN);
        CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, list);
        lv.setAdapter((customAdapter));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
public void compare(ArrayList list_old, ArrayList list_new) {
    try {
        Iterator<User> iterator_old = list_old.iterator();
        Iterator<User> iterator_new = list_new.iterator();
        while (iterator_new.hasNext()) {
            User user_new = iterator_new.next();
            boolean NEW = true;
            while (iterator_old.hasNext()) {
                User user_old = iterator_old.next();
                //Log.i(":N:"+user_new.getUsername(), ":O:"+user_old.getUsername());
                if (user_new.getUsername().equals(user_old.getUsername())) {
                    NEW = false;
                    break;
                }
            }
            if (NEW) {
                generateNotification(getApplicationContext(), user_new.getUsername() + " has been added.");
                Log.i("True", "Changed");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)当你这样做时,tmp = list你不存储listin 的值tmp.相反,您只需tmp引用与引用相同的对象list.稍后,当您修改时list,您将修改tmp引用的内容.
最初,list引用用户列表:
 list -> [user0, user1, user2]
Run Code Online (Sandbox Code Playgroud)
之后tmp = list,双方list并tmp引用同一个列表:
 list -> [user0, user1, user2] <- tmp
Run Code Online (Sandbox Code Playgroud)
打电话时list.clear(),清除原始列表:
 list -> [] <- tmp
Run Code Online (Sandbox Code Playgroud)
当您添加新元素时list,您修改原始列表:
 list -> [newuser0] <- tmp
Run Code Online (Sandbox Code Playgroud)
如果你需要存储的副本list中tmp,你需要修改旧的之前创建一个新的列表:
List<User> tmp = new ArrayList<>(list);
Run Code Online (Sandbox Code Playgroud)
请注意,User存储在两个列表中的对象仍然是相同的,因此如果您从一个列表中修改对象,它将反映在另一个列表中.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           69 次  |  
        
|   最近记录:  |